home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0256
/
mdebug21.exe
/
MDEBUG.PRT
< prev
Wrap
Text File
|
1992-11-21
|
311KB
|
10,201 lines
───────────────────────────────────────────────────────────────────
MDEBUG
Version V2.05
Release 01.12.1992
Highperformance Debugging Tool für PCs
Copyright 1992 by
Bernd Schemmer
All Rights reserved.
───────────────────────────────────────────────────────────────────
Credits
MDEBUG wurde geschrieben von Bernd Schemmer.
───────────────────────────────────────────────────────────────────
Copyright
MDEBUG ist Copyright 1988 - 1992 by Bernd Schemmer
Dieses Dokument ist Copyright 1992 by Bernd Schemmer
───────────────────────────────────────────────────────────────────
Eingetragene Warenzeichen, Warennamen
Warenamen und eingetragene Warenzeichen werden in diesem Text ohne
Gewährleistung einer freien Verwendung benutzt.
Alle benutzten Warenanamen und eingetragenen Warenzeichen sind
Eigentum ihrer jeweiligen Besitzer.
───────────────────────────────────────────────────────────────────
Granatie-Ausschluß-Erklärung
Bernd Schemmer gibt keine Garantien irgendeiner Art, weder aus-
drücklich noch implizit, einschliesslich unbegrenzt aller Garantien
der Verwendbarkeit und/oder Nichtverwendbarkeit für irgendeinen
Zweck. Bernd Schemmer übernimmt keine Verpflichtungen für den
Gebrauchswert dieser Software über den Kaufpreis dieser Software
hinaus. Unter keinen Umständen ist Bernd Schemmer haftbar für
jedwede Folgeschäden, einschliesslich aller entgangenen Gewinne und
Vermögensverluste, oder anderer mittelbarer und unmittelbarer
Schäden, die durch den Gebrauch oder die Nichtverwendbarkeit
dieser Software und ihrer begleitenden Dokumentation entstehen.
Dies gilt auch dann, wenn Bernd Schemmer über die Möglichkeit
solcher Schäden unterrichtet war oder ist.
───────────────────────────────────────────────────────────────────
Inhalt Seite
────────────────────────────────────────────────────────────
Kurzbeschreibung von MDEBUG .......................... 1
Benutzung von MDEBUG ................................. 2
Nichtgewerbliche Weitergabe von MDEBUG ............... 3
Vertrieb von MDEBUG über PD-Händler und Mailboxen .... 4
System-Vorraussetzungen .............................. 5
Einschränkungen ...................................... 5
Vorbereitungen vor dem Start ......................... 6
Eintragen der Registrierungsnummer ................... 6
Passwort ............................................. 7
Prozessnummer überprüfen ............................. 9
Starten von MDEBUG ................................... 10
Parameter für MDEBUG ................................. 10
INT=[0|{nn}{,N}] ................................... 10
CoM=nn ............................................. 11
CoD=nn ............................................. 11
CoHm=nn ............................................ 11
CoC=nn{,mm} ........................................ 12
RoM=nn ............................................. 12
RoD=nn ............................................. 12
RoH=nn ............................................. 12
SEG=[nnnn|reg] ..................................... 12
OFF=[nnnn|reg] ..................................... 12
STD ................................................ 13
STM ................................................ 13
STH ................................................ 13
KEY=X{n} ........................................... 13
SET ................................................ 13
EXIT ............................................... 14
&name{,{nnnn}}{,{mmmm}}{,N} ........................ 15
*name{,{nnnn}}{,{mmmm}}{,N} ........................ 17
HELP{={pfad}{name}} ................................ 18
NOHELP ............................................. 18
BUF=nnnn ........................................... 19
TEXT{=nnnn}{,m} .................................... 19
GRAPH .............................................. 20
REALCURSOR=n ....................................... 20
LOADx .............................................. 20
────────────────────────────────────────────────────────────────────────────────
Inhalts-Verzeichnis I 1
Inhalt Seite
────────────────────────────────────────────────────────────
PRO=nn ............................................. 20
? .................................................. 21
DEF ................................................ 21
# .................................................. 21
MAKE ............................................... 22
MF2 ................................................ 22
NoMF2 .............................................. 22
@ .................................................. 22
Errorlevel ........................................... 24
Voreinstellungen ..................................... 24
Aufruf über den Hotkey ............................... 25
Beschreibung des Monitors ............................ 26
Aufbau des Monitor-Fensters ........................ 26
Tastenbelegung im Monitor .......................... 29
Beschreibung der Online-Hilfe ........................ 38
Aufbau des Fensters der Online-Hilfe ............. 38
Tastenbelegung in der Online-Hilfe ............... 39
Beschreibung des Interpreters ........................ 40
Aufbau des Interpreter-Fensters .................... 40
Tasten-Belegung im Interpreter ..................... 43
Tastenumbelegungen im Interpreter .................. 49
Befehle des Interpreters ........................... 49
?{...} ........................................... 50
V{...} {reg1}{,}{reg2} ........................... 51
#26{...} {seg1:}[reg1|wert1] {...}{#26} .......... 51
#27{...} {seg1:}[reg1|wert1] ..................... 52
#27{...}H {seg1:}[reg1|wert1] .................... 53
D{UMP} Mn ........................................ 53
P{OINTER} {seg1:}[reg1|wert1] .................... 53
A{DD} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] .... 53
S{UB} {seg1:}[reg1|wert1],{seg2}[reg2|wert2] ..... 53
a{dc} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] .... 53
s{bc} {seg1:}[reg1|wert1],{seg2}[reg2|wert2] ..... 54
+ {seg1:}[reg1|wert1] ............................ 54
- {seg1:}[reg1|wert1] ............................ 54
> {seg1:}[reg1|wert1] ............................ 54
< {seg1:}[reg1|wert1] ............................ 54
────────────────────────────────────────────────────────────────────────────────
Inhalts-Verzeichnis I 2
Inhalt Seite
────────────────────────────────────────────────────────────
» {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........ 54
« {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........ 55
& {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........ 55
| {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........ 55
! {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........ 55
T {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........ 55
N{EG} {seg1:}[reg1|wert1] ........................ 55
M{OV} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] .... 56
C{OP}Y ........................................... 56
I{NT} [reg|wert] ................................. 56
B b1{{,}b2..{,}bn} ............................... 57
G{O} [reg|wert] .................................. 58
/ hilfreg ........................................ 59
\ hilfreg ........................................ 59
# hilfreg ........................................ 59
W{AIT} ........................................... 59
H{OME} {[reg|wert]} .............................. 60
H{...}N {[reg|wert]} ............................. 60
¿ [reg|wert] ..................................... 61
¿H [reg|wert] .................................... 62
F {n} ............................................ 62
FX ............................................... 62
@ {...} .......................................... 62
Q{UIT} ........................................... 63
Q{UIT}R .......................................... 63
Q{UIT}L .......................................... 63
SH [suchmaske] {,}{...} .......................... 64
Bedeutung der Parameter ............................ 69
Konstanten ......................................... 73
Ausdruck ........................................... 75
Adressierung von Speicherstellen ................... 81
Syntax der Befehle ................................. 81
Syntax der Operanden ............................... 84
Sonstiges .......................................... 84
Aufruf von MDEBUG im Graphikmodus .................... 86
Funktionen der Bildschirmtreiber ..................... 87
Funktion 0 - Get Driver Status .................... 88
────────────────────────────────────────────────────────────────────────────────
Inhalts-Verzeichnis I 3
Inhalt Seite
────────────────────────────────────────────────────────────
Funktion 1 - Init Driver .......................... 89
Funktion 2 - Save Graphik data .................... 89
Funktion 3 - Restore Graphik data ................. 90
Funktion 4 - Show saved data ...................... 90
Funktion 5 - Switch back to text screen ........... 91
Funktionen 06 bis 7Fh - reserviert ................. 91
Funktionen 80h bis 0FFh - reserviert ............... 91
Erweiterungen von MDEBUG mittels Kommandotreiber ..... 92
Funktionen der Kommandotreiber ....................... 93
Funktion 0 - Get Status ........................... 94
Funktion 1 - Init Driver .......................... 95
Funktion 2 - Execute interpreter command .......... 96
Funktion 3 - Execute key in the monitor ........... 100
Funktion 4 - Execute key in the interpreter ....... 101
Funktionen 05h bis 0Ah - reserviert ................ 102
Funktionen 10h - Get adress of the old interrupt
2Fh .................................................. 102
Funktion 11h - Start Driver ........................ 103
Funktion 12h - End Driver .......................... 103
Funktionen 13h bis 7Fh - reserviert ................ 104
Funktionen 80h bis 0FFh - reserviert ............... 104
Zusätzlicher User-Interrupt .......................... 105
Funktion 0 - Status ermitteln ...................... 106
Funktion 1 - Ermittle Adresse der Hilfsregister .... 107
Funktion 2 - Status setzen ......................... 108
Funktion 3 - Aufruf von MDEBUG ..................... 109
Funktion 4 - Aufruf von MDEBUG mit den akt. Werten . 109
Funktion 5 - Lösche oder Setze Flags von MDEBUG .... 110
Funktion 6 - Ermittle Passwort-Status .............. 110
Funktion 7 - Ermittle aktiven Teil von MDEBUG ...... 111
Funktionen 8 bis 0FFh - reserviert ................. 111
Sonstiges zum User-Int ............................. 111
Anhang A ............................................. 112
Fehlermeldungen beim Aufruf von MDEBUG ............. 113
Meldungen des Interpreters von MDEBUG .............. 121
Weitere Meldungen des Interpreters von MDEBUG ...... 122
Anhang B ............................................. 123
────────────────────────────────────────────────────────────────────────────────
Inhalts-Verzeichnis I 4
Inhalt Seite
────────────────────────────────────────────────────────────
Programm-Interna ................................... 123
Hinweise für die Fehlersuche - Trouble-Shooting .... 124
Stack-Überlauf ..................................... 131
Tastatur-Codes ..................................... 132
Make-Code der Aufruf-Taste ......................... 134
Verträglichkeit gegenüber anderen Programmen ....... 135
Anhang C ............................................. 136
Installieren von MDEBUG ............................ 137
Ändern der Tastenbelegung von MDEBUG ............... 138
Anhang D ............................................. 145
Utilities und Beispieldateien zu MDEBUG .............. 145
MDEBUG.HLP ......................................... 146
MDHELP.INP (VV) ................................... 146
MDMKHLP.COM (VV) .................................. 146
MDSHELP.COM (VV) .................................. 152
SETMD.EXE .......................................... 152
SETREGNR.EXE (VV) ................................. 153
CALLMDB.COM (VV) .................................. 153
DISSTAT.COM (VV) .................................. 157
TESTMD.PAS ......................................... 158
TESTMD.EXE ......................................... 158
CHECKMD.A86 ........................................ 158
CHECKMD.OBJ ........................................ 158
CALLMD.A86 ......................................... 158
CALLMD.OBJ ......................................... 158
MDCMD.A86 .......................................... 159
MDCMD.OBJ .......................................... 159
KONVERT.A86 ........................................ 159
KONVERT.OBJ ........................................ 159
UPSTR.BIN .......................................... 159
LOWSTR.BIN ......................................... 159
UPSTR.A86 .......................................... 159
LOWSTR.A86 ......................................... 159
SHOW2FP.COM ........................................ 160
FREESTCK.COM ....................................... 160
MDCGADRV.ASM (VV) ................................. 160
MDHGCDRV.ASM (VV) ................................. 160
────────────────────────────────────────────────────────────────────────────────
Inhalts-Verzeichnis I 5
Inhalt Seite
────────────────────────────────────────────────────────────
MDDRIVER.ASM (VV) ................................. 161
MDBSPDRV.ASM (VV) ................................. 161
MDBSPDRV.INC (VV) ................................. 161
────────────────────────────────────────────────────────────────────────────────
Inhalts-Verzeichnis I 6
Kurzbeschreibung von MDEBUG
───────────────────────────
MDEBUG ist ein speicherresidentes Debugging-Tool für PCs bestehend
aus einem Speichermonitor, einem Interpreter mit eigener Program-
miersprache und einem interaktiven und selektiven DisAssembler.
MDEBUG wurde ursprünglich für die Ermittlung von undokumentierten
Strukturen des Betriebssystems MS-DOS entwickelt, kann aber viel-
fältig eingesetzt werden. (z.B. zur Unterstützung bei der Program-
mierung).
MDEBUG sollte nur von Programmierern mit gutem Wissen über ihren
PC und dem Betriebssystem MS-DOS bzw. PC-DOS verwendet werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 1
Benutzung von MDEBUG
────────────────────
MDEBUG ist ein Shareware-Programm, dessen Copyright beim Autor
liegt.
Die Shareware-Version von MDEBUG kann für 4 Wochen getestet werden.
Danach muß entschieden werden, ob MDEBUG weiter benutzt werden
soll oder nicht. Falls MDEBUG nach der Probezeit weiter benutzt
werden soll, muß die Vollversion erworben werden.
Die Vollversion von MDEBUG kostet 75,- DM und kann mit dem Formular
aus der Datei MDEBUG.FRM bestellt werden.
Die Vollversion von MDEBUG enthält:
- die neueste Version von MDEBUG incl. einer eigenen Registrier-
rungs-nummer. Die Vollversion ist identisch mit der Shareware-
Version von MDEBUG. Allerdings kann die Shareware-Meldung beim
Programmstart (incl. der 'Wartezeit') entfernt werden. Zudem ist
der Parameter 'MAKE' nur in der Vollversion implementiert. (s.u.)
- weitere Utilities zur Unterstützung von MDEBUG, teilweise incl.
Quellcode (siehe Anhang D)
- Unterstützung bei Problemen mit MDEBUG und bei der Programmierung
von Bildschirm- oder Kommandotreibern für MDEBUG
- die Möglichkeit zum kostengünstigen Bezug großer Updates von
MDEBUG
Ein großes Update ist eine Erweiterung von MDEBUG um neue Funktio-
nen - erkennbar daran, daß die Hauptversionsnummer geändert wurde.
Die Hauptversionnummer besteht aus den Vorkommastellen und der
ersten Nachkommastelle der Versionsnummer (bei V1.70 ist die Haupt-
versionsnummer z.B. 1.7).
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 2
Ein kleines Update ist eine Korrektur von MDEBUG zur Behebung von
kleinen Fehlern und Mängeln - erkennbar daran, daß sich nur die
Revisions-Nummer (= 2. Nachkommastelle) oder nur das Release-Datum
ändert (ein kleines Update wäre z.B. der Wechsel von Version V1.70
zu V1.71).
Kleine Updates können von Besitzern der Vollversion gegen Erstat-
tung der Porto- und Verpackungskosten jederzeit bezogen werden,
falls die Hauptversion der Vollversion von MDEBUG mit der Hauptver-
sion der aktuellen Version von MDEBUG übereinstimmt.
Besitzer der Vollversion von MDEBUG dürfen diese auf bis zu zwei
(ihnen gehörenden!) Computern gleichzeitig benutzen.
Hinweis:
Ein gedrucktes Handbuch für MDEBUG ist im Moment noch nicht
verfügbar, Besitzer der Vollversion erhalten aber eine Mitteilung
falls ein Handbuch verfügbar ist.
Nichtgewerbliche Weitergabe von MDEBUG
──────────────────────────────────────
Kopien der Original-Diskette mit der Shareware-Version von MDEBUG
können und sollen (!) beliebig oft weitergegeben werden solange
keins der Programme und keine der Dateien auf der Diskette geändert
oder gelöscht werden und keine Dateien oder Programme ohne das
Einverständnis des Autors hinzugefügt werden.
Die Vollversion darf - mit Ausnahme der Datei MDEBUG_3.EXE - unter
Berücksichtigung der für die Shareware-Version angegebenen Bedin-
gungen ebenfalls weiter gegeben werden. Die nur in der Vollversion
enthaltene Datei MDEBUG_3.EXE darf auf keinen Fall weiter gegeben
werden!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 3
Vertrieb von MDEBUG über PD-Händler und Mailboxen
─────────────────────────────────────────────────
Jeder PD-Händler darf die Shareware-Version von MDEBUG vertreiben,
solange folgende Punkte eingehalten werden:
- Es dürfen keine Dateien auf der Diskette geändert oder gelöscht
werden. D.h. alle in der Datei INHALT.LST aufgelisteten Dateien
müssen in unveränderter Form vorhanden sein.
- Außer kleineren Info- oder Werbedateien dürfen ohne Absprache mit
dem Autor keine weiteren Dateien auf die Diskette kopiert werden.
- Es darf immer nur die neueste Version von MDEBUG vertrieben
werden. Händler, die MDEBUG vertreiben wollen, sollten sich daher
auf meine Mailing-Liste für Update-Versionen setzen lassen. Der
Bezug der Updates von MDEBUG kann auch über die DS (Deutsche
Shareware) erfolgen.
- Für den Vertrieb von MDEBUG darf eine Gebühr von bis zu 20,- DM
verlangt werden, solange sichergestellt ist, daß der Käufer weiß,
das es sich hierbei um Gebühren des Vertriebs und NICHT um den
Preis von MDEBUG handelt.
- Der Katalogeintrag für MDEBUG muß immer auch den Namen des Autors
- Bernd Schemmer - enthalten. Zudem muß aus dem Katalog klar er-
sichtlich sein, daß es sich um eine Shareware-Version handelt.
Die Begriffe Public Domain, Freie Software oder Freeware dürfen
mit Bezug auf MDEBUG weder schriftlich noch mündlich verwendet
werden.
Für die Katalog-Einträge sollte die Datei 'MDEBUG.TXT' bzw. ein
Auszug aus dieser verwendet werden.
Für den Vertrieb von MDEBUG über Mailboxen gelten ebenfalls die
obigen Bedingungen. Das Packen ALLER Dateien auf der Diskette in
ein neues Archiv ist für den Vertrieb über Mailboxen gestattet.
Ich behalte mir vor, Vertrieben oder Mailboxen, die gegen diese
Bedingungen verstoßen, den Vertrieb von MDEBUG zu untersagen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 4
System-Vorraussetzungen
───────────────────────
Hardware: IBM-PC/AT/Kompatibler mit einem beliebigem
Graphikadapter (CGA, HGC, EGA, VGA, o.a.)
Ein zweiter Bildschirm wird unterstützt.
MDEBUG belegt ca. 16 K Hauptspeicher
(Minimum, ohne Online-Hilfe und Treiber)
Für die Installation von MDEBUG werden 64 K
freier Speicher benötigt.
Software: Betriebssystem MS-DOS/PC-DOS ab Version 3.0
oder ein kompatibles Betriebssystem.
Für die Übersetzung der Quelltexte wird der
Assembler A86 Version V3.22 benötigt.
Einschränkungen
───────────────
MDEBUG läuft auf meinem Rechner fehlerfrei. Allerdings kann ich
natürlich nicht dafür garantieren daß es auf allen Rechnern läuft.
(insbesondere die Verträglichkeit mit anderen TSRs, siehe auch
'Verträglichkeit gegenüber anderen Programmen')
Falls MDEBUG auf einem Rechner nicht läuft bzw. nicht korrekt
läuft, kann ich versuchen den Fehler zu finden und zu beheben
- falls mir dies mitgeteilt wird. Dies gilt auch für die Shareware-
Version von MDEBUG.
Dazu benötige ich dann die Daten über die genaue Ausstattung des
Rechners (Speicherausbau, Graphikadapter, etc.), die Namen und
Versionsnummern der normalerweise geladenen Programme (incl. der
DOS-Version) und, bei einer Fehlfunktion von MDEBUG, eine möglichst
ausführliche Beschreibung des Fehlers.
Da es mit dem Programm MDEBUG prinzipiell auch möglich ist Software
und Hardware zu beschädigen, übernehme ich für Fehler des Benutzers
und für bisher von mir nicht bemerkte Programmfehler und sich
daraus eventuell ergebende Schäden keinerlei Haftung!
Änderungs-, Erweiterungswünsche und Kritik zu MDEBUG sind mir immer
willkommen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 5
Vorbereitungen vor dem Start
────────────────────────────
Vor dem ersten Start von MDEBUG muß einiges beachtet werden:
Eintragen der Registrierungsnummer
──────────────────────────────────
Besitzer der Vollversion sollten als erstes ihre Registrierungs-
nummer in die Datei MDEBUG.COM eintragen. Hierzu dient das Programm
SETREGNR.EXE. SETREGNR benötigt keine Parameter und erfragt alle
Daten im Dialog mit dem Benutzer.
Hinweis:
Der Parameter 'MAKE' von MDEBUG kann erst nach der Eintragung der
Registrierungsnmmer benutzt werden!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 6
Passwort
────────
MDEBUG ist zur Sicherung vor unbefugten Benutzern mit einer
(abschaltbaren) Passwort-Abfrage versehen.
Falls die Passwort-Abfrage aktiv ist, wird das Passwort bei jedem
Aufruf über den Hotkey und jedem Aufruf einer der Funktionen des
User-Ints (mit Ausnahme der Funktion 6, s.u.) abgefragt.
MDEBUG überprüft vor der Passwort-Abfrage den Bildschirmmodus. Ist
dieser nicht korrekt, wird die Eingabe abgebrochen.
┌──── MDEBUG ────┐
Aufbau des Fensters zur Eingabe eines Passworts: │ Passwort: **** │
└────────────────┘
Das Passwort ist 4 Zeichen lang und besteht nur aus Zeichen mit
einem ASCII-Code größer oder gleich 32 (= Leerzeichen). Es wird
verdeckt eingegeben, wobei die Cursorposition die aktuelle Stelle
im Passwort bei der Eingabe wiedergibt. Die Schreibweise (groß/
klein) des Passwortes muß übereinstimmen.
Bei der Eingabe gilt immer der Overwrite-Modus; zum Positionieren
des Cursors können die Tasten
<Home>, <CursorRight>, <CursorLeft> und <BackSpace>
verwendet werden.
<ESC> bricht die Abfrage (d.h. den Aufruf) ab, <RETURN> beendet
die Eingabe des Passwortes.
Bei falscher Eingabe, wird der Aufruf abgebrochen und eine Fehler-
meldung (incl. Fehlerton) ausgegeben. Die Fehlermeldung muß mit
einem Tastendruck quittiert werden. Die gedrückte Taste wird igno-
riert.
Für die Eingabe des Passwortes im Dialog stehen maximal 10 Sekunden
zur Verfügung - nachdem diese Zeitspanne abgelaufen ist, bricht
MDEBUG die Passwort-Abfrage ab (->> der unterbrochene Prozess läuft
weiter).
┌──── MDEBUG ────┐
Ausgabe bei falschem Passwort: │ INKORREKT │
└────────────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 7
Zur Änderung von Variablen über einen zweiten Aufruf von MDEBUG
mit dem Parameter 'SET' müssen, falls die residente Version mit
einem aktiven Passwort ausgestattet ist, ebenfalls die Passwörter
beider Versionen übereinstimmen. Dies gilt auch für den Aufruf von
MDEBUG mit dem Parameter 'EXIT'.
Das Passwort kann nur in der Datei MDEBUG.COM durch das Programm
SETMD.EXE geändert werden. Der Aktiv-Schalter des Passwortes kann
jederzeit während eines Aufrufes gesetzt oder gelöscht werden.
(s.u.)
Der Aktiv-Schalter bestimmt, ob das Passwort abgefragt werden soll
('ON') oder nicht ('OFF'). Der Status des Aktiv-Schalters wird bei
installiertem Passwort auf dem oberen Rand des Interpreter-Fensters
angezeigt.
Zu beachten ist, daß nur immer EINE Kopie von MDEBUG ein bestimm-
tes Passwort hat. D.h. auch wenn über das Programm SETMD ver-
schiedenen Kopien von MDEBUG.COM das gleiche Passwort zugeordnet
wird, sind die Passwörter der Kopien NICHT kompatibel.
In der Original-Version von MDEBUG ist noch kein Passwort einge-
richtet.
Die Fenster zur Passwort-Abfrage werden in der aktuellen Farbe des
Bildschirms ausgegeben.
Hinweis:
Die Sicherheitskopie von MDEBUG sollte immer OHNE Passwort erstellt
werden!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 8
Prozessnummer überprüfen
────────────────────────
MDEBUG benutzt zur Kommunikation mit den Bildschirm- und Kommando-
treibern den Multiplex-Interrupt 2Fh. (siehe unten)
Die voreingestellten Prozessnummern, die MDEBUG zur Kommunikation
über den Interrupt 2Fh belegt, sind 0D0h und 0D1h. Vor dem Start
von MDEBUG muß überprüft werden, ob diese Prozessnummern schon von
einem anderen Programm benutzt werden.
Die Überprüfung der Prozessnummern kann mit dem Util SHOW2FP.COM
gemacht werden. (Vor der Überprüfung der Prozessnummer sollten alle
Gerätetreiber und speicherresidenten Programme, die normalerweise
benutzt werden, geladen sein.) Der Aufruf von SHOW2FP lautet dann:
SHOW2FP D0 <RETURN>
Sollte SHOW2FP nun melden, daß eine der beiden Prozessnummern
(die als Parameter angegebene oder die auf diese folgende) schon
belegt ist, müssen zuerst zwei freie aufeinanderfolgende Prozess-
nummern gesucht werden (Ansonsten kann MDEBUG ohne Änderung benutzt
werden).
Dazu ruft mensch SHOW2FP einmal ohne Parameter auf. Also:
SHOW2FP <RETURN>
SHOW2FP gibt nun alle belegten Prozessnummern zwischen C0h und
FFh aus. Nun müssen zwei aufeinanderfolgende freie Prozessnummern
(also zwei die NICHT von SHOW2FP ausgegeben wurden) zwischen C0h
und FFh gewählt werden. Bei JEDER Installation von MDEBUG muß nun
die niedrigere der beiden Nummern als Prozessnummer für MDEBUG über
den Parameter 'PRO=nn' explizit angegeben werden.
Die neuen Prozessnummern müssen ebenfalls beim Aufruf der Kommando-
und Bildschirmtreiber über den Parameter '/Pnn' angegeben werden.
Besitzer der Vollversion können die neue Prozessnummer natürlich
auch über den Parameter 'MAKE' als neue Prozessnummer in die Datei
MDEBUG.COM eintragen. Sinnvollerweise sollten die neuen Prozess-
nummern auch über den Parameter '/I' in die Kommando- und Bild-
schirmtreiber als Voreinstellungen übernommen werden.
Es sei hier nochmals darauf hingewiesen, daß eine falsche Prozess-
nummer für MDEBUG das System zum Absturz bringen kann!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 9
Starten von MDEBUG
──────────────────
Aufruf: MDEBUG {INT=[0|{nn}{,N}]} {KEY=X{n}}
{CoM=nn} {CoD=nn} {CoHm=nn} {CoC=nn{,mm}}
{RoM=nn} {RoD=nn} {RoH=nn}
{SEG=[nnnn|reg]} {OFF=[nnnn|reg]}
{STD} {STM} {STH}
{SET} {EXIT}
{&name{,{nnnn}}{,{mmmm}}{,N}}
{*name{,{nnnn}}{,{mmmm}}{,N}}
{TEXT{=nnnn}{,m}} {GRAPH} {PRO=nn}
{REALCURSOR=n} {LOAD{H|L}}
{HELP{={pfad}{name}}} {NOHELP} {BUF=nnnn}
{?} {#} {DEF} {MAKE}
{MF2} {NoMF2}
{@ kommentar}
Hinweis:
Beim Aufruf der Shareware-Version wird eine Shareware-Meldung
ausgegeben und eine kurze Zeit gewartet. Die Wartezeit kann durch
das Betätigen einer Taste beendet werden.
Die angegebenen Voreinstellungen beziehen sich alle auf eine
Original-Version von MDEBUG. (siehe Parameter 'MAKE')
Eine über den Parameter 'MAKE' angepasste Version von MDEBUG gibt
zusätzlich bei jedem Aufruf die Meldung
Version angepasst.
auf die Standard-Ausgabe aus.
Parameter für MDEBUG
INT=[0|{nn}{,N}]
'nn' ist die Nummer des zusätzlich zu installierenden Interrupts.
(= User-Int, hex., Intervall: 60h .. 67h oder 0h, Voreinst.: 60h)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 10
Der angegebene Interrupt darf noch nicht belegt sein (d.h. Segment
und Offset in der Interrupt-Tabelle müssen 0 sein!).
Die explizite Angabe von 0h als Interrupt-Nummer unterdrückt die
Installation eines zusätzlichen Interrupts.
Da die Routinen für den User-Int aber trotzdem resident gehalten
werden, kann später ein User-Int über den Aufruf mit dem Parameter
'SET' eingerichtet werden.
Der Zusatz ',N' verhindert die Überprüfung ob der angegebene Inter-
rupt schon belegt ist.
CoM=nn
'nn' ist das Farb-Attribut des Monitors von MDEBUG
(hex., Intervall: 0..0FFh, Voreinst.: 70h)
Aufbau des Farb-Attributes:
┌────────┬────────────────────────────────────────┐
│ Bit(s) │ Bedeutung │
╞════════╪════════════════════════════════════════╡
│ 0..3 │ Binärcodierung der Vordergrund-Farbe │
│ │ Intervall: 0..0Fh │
│ 4..6 │ Binärcodierung der Hintergrund-Farbe │
│ │ Intervall: 0..07h │
│ 7 │ 1 = Blinken, 0 = kein Blinken │
│ │ oder (je nach Modus der Graphik-Karte) │
│ │ 1 = Hell, 0 = normal │
└────────┴────────────────────────────────────────┘
CoD=nn
'nn' ist das Farb-Attribut des Interpreters von MDEBUG
(hex., Intervall: 0..0FFh, Voreinst.: 70h)
Aufbau des Attributes: siehe Parameter 'CoM'
CoHm=nn
'nn' ist das Farb-Attribut für die Hilfsfarbe m der Online-Hilfe
von MDEBUG (m gleich 1, 2 oder 3).
('nn': hex., Invervall: 0..0FFh, Voreinstellungen:
'm' = 1 -> 07h 'm' = 2 -> 0Fh 'm' = 3 -> 70h)
Aufbau des Attributes: siehe Parameter 'CoM'
Der Parameter wird ignoriert, falls die Online-Hilfe nicht geladen
ist.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 11
CoC=nn{,mm}
'nn' ist das Farb-Attribut für den Cursor im Insert-Modus des
Interpreters (hex., Intervall: 0..0FFh, Voreinst.: F1h) und 'm' ist
das Farb-Attribut des Cursors im Overwrite-Modus (hex., Intervall:
0..0FFh, Voreinst.: F9h).
Falls 'mm' fehlt, bildet MDEBUG den Wert durch Vertauschen der
beiden Nibbles von 'nn'.
Aufbau der Attribute: siehe Parameter 'CoM'
RoM=nn
'nn' ist die erste Zeile für die Anzeige des Monitors
(hex., Intervall: 01h..0Eh, Voreinst.: 02h)
RoD=nn
'nn' ist die erste Zeile für die Anzeige des Interpreters
(hex., Intervall: 01h..0Ch, Voreinst.: 0Ch)
RoH=nn
'nn' ist die erste Zeile für das Window der Online-Hilfe
(hex., Intervall: 01..0Eh, Voreinst.: 01h);
Der Parameter hat keine Wirkung, falls die Online-Hilfe nicht
geladen ist.
SEG=[nnnn|reg]
'nnnn' ist die Voreinstellung für den Wert des Registers SE.
(hex., Intervall: 0000h..FFFFh, Voreinst.: FE00h)
'reg' ist der Name des Registers aus dem das Segment der Monitor-
Start-Adresse ermittelt wird. 'reg' muß ein Wort-Register sein.
OFF=[nnnn|reg]
'nnnn' ist die Voreinstellung für den Wert des Registers OF.
(hex., Intervall: 0000h..FFFFh, Voreinst.: 0000h)
'reg' ist der Name des Registers aus dem der Offset der Monitor-
Start-Adresse ermittelt wird. 'reg' muß ein Wort-Register sein.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 12
STD
Start beim Aufruf sofort im Interpreter
STM
Start beim Aufruf im Monitor (Voreinstellung)
STH
Start beim Aufruf sofort in der Online-Hilfe
Der Parameter hat keine Wirkung, falls die Online-Hilfe nicht
geladen ist.
KEY=X{n}
'X' ist die Hotkey-Taste von MDEBUG
(Zeichen, Intervall: 'A'..'Z', Voreinstellung: 'Y')
Der SCAN-Code wird von MDEBUG selbstständig ermittelt.
'n' ist die Codierung der Umschalttasten bei Aufruf von MDEBUG
über den Hotkey als hexadezimaler Wert.
(hex., Intervall: 01..0Fh; Voreinstellung: 0Ch (=8+4) = <CTRL-ALT>)
Für die Codierung der Umschalttasten gelten folgende Werte:
┌─────────────────┬────────┐
│ Taste │ Wert │ Kombinationen der Umschalttasten
╞═════════════════╪════════╡ können durch Addition erreicht
│ SHIFT rechts │ 01 │ werden.
│ SHIFT links │ 02 │ Der Status der anderen Sonder-
│ CTRL-Taste │ 04 │ tasten ist nicht abfragbar.
│ ALT-Taste │ 08 │
└─────────────────┴────────┘
SET
Die explizit angegebenen Parameter werden an eine schon residente
Version weitergegeben, MDEBUG installiert sich nicht zum zweiten-
mal. Zur Änderung der Werte einer residenten Version MUSS der
Parameter angegeben werden (auch für die Parameter HELP, *name und
&name, s.u.).
Falls die residente Version mit einem aktiven Passwort versehen
ist, muß das Passwort des residenten MDEBUG mit dem Passwort des
transienten MDEBUG übereinstimmen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 13
Das Aktiv-Flag von MDEBUG und das Warte-Flag für den automatischen
Aufruf falls DOS nicht aktiv ist (s.u.) werden auch bei falschem
Passwort zurückgesetzt.
Der Aufruf zur Änderung von Variablen einer residenten Version kann
auch aus der DOS-Shell eines Programms erfolgen, da sich MDEBUG nur
einmal installieren lässt.
Ist noch keine Version installiert, wird der Parameter ignoriert
und MDEBUG wird mit den angegebenen Parametern installiert.
Für die Übergabe von Parametern an eine schon installierte Version
gilt:
Falls ein neuer User-Int erfolgreich installiert wurde, wird der
Eintrag in der Interrupt-Tabelle für den alten User-Interrupt auf 0
zurückgesetzt. Falls der als Nummer für den User-Int 0 angegeben
wird, wird der User-Int temporär deaktiviert.
Nicht berücksichtigt werden die Parameter
'STD', 'STM', 'STH',
'BUF', 'NOHELP', 'LOADx',
'SEG=reg', 'OFF=reg'.
Alle anderen Parameter werden wie bei der Erst-Installation behan-
delt und an die residente Version übergeben.
Der Parameter 'SET' arbeitet unabhängig davon, ob ein User-Int
installiert ist oder nicht.
EXIT
Entfernen von MDEBUG aus dem Speicher
Vorraussetzung für das Entfernen von MDEBUG aus dem Speicher ist,
daß MDEBUG das letzte Programm in den Interrupt-Ketten für den
Interrupt 08h und dem Interrupt 09h ist. Ist dies nicht der Fall,
gibt MDEBUG eine Fehlermeldung aus und bleibt resident und an-
sprechbar.
Der Parameter wird bei der Erstinstallation ignoriert, ansonsten
hat er Vorrang vor allen anderen Parametern. Eventuell zusätzlich
angegebene Parameter werden nur auf die Syntax geprüft, aber nicht
ausgeführt.
Vor dem Entfernen von MDEBUG werden die Interrupts 09h und 08h
wieder auf die alte Routine gelenkt und die Adresse eines instal-
lierten User-Ints in der Interrupt-Tabelle wird auf die Adresse 0:0
zurückgesetzt. Falls ein Passwort installiert ist, gilt dasselbe
wie für den Parameter 'SET'.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 14
&name{,{nnnn}}{,{mmmm}}{,N}
Einlesen einer Datei in das PSP von MDEBUG.
'name' ist der Name (evtl. inclusive Pfad) der zu lesenden Datei.
Hinter dem '&' und vor und hinter den Kommata dürfen keine Leer-
zeichen stehen.
Die Datei wird beim Lesen folgendermaßen konvertiert:
LineFeeds (LF, ASCII-Code 0Ah) werden überlesen, CarriageReturns
(CR, ASCII-Code 0Dh) werden in Null-Bytes umgewandelt und hinter
dem letzten gelesenen Zeichen fügt MDEBUG ein Null-Wort an.
Das Zeichen '@' gilt als Kommentar-Einleitung, d.h. alle Zeichen
hinter einem '@' bis zum nächsten CR (= Zeilenende) in der Eingabe-
datei werden überlesen. Zeilen die nur aus einem Kommentar bestehen
werden vollständig überlesen, wobei auch das abschließende CR nicht
übernommen wird. Falls das Zeichen '@' ins PSP übernommen werden
soll, muß es als '@@' angegeben werden.
Beispiel für eine Eingabe-Datei für den Parameter '&name':
0 1 2 3
Spalte 123456789012345678901234567890...
─────────────────────────────────
@ Kommentarzeile (wird nicht übernommen!)
1. Zeile
2. Zeile @ Kommentar (wird nicht übernommen)
3. Zeile
4. Zeile @@ kein Kommentar, wird übernommen
5. Zeile @ weiterer Kommentar
6. Zeile
@ weitere Kommentarzeile
@ weitere Kommentarzeile
7. Zeile
...
Bei der Erstinstallation wird durch diesen Parameter zusätzlich das
Register SE mit dem PSP-Segment von MDEBUG und das Register OF mit
dem Wert 'nnnn' geladen.
Falls der Parameter 'SE=nnnn' bzw. 'OF=nnnn' angegeben ist, wird
das entsprechende Register allerdings nicht überschrieben.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 15
'nnnn' ist der Offset im PSP ab dem die Datei gelesen werden soll.
(hex., Voreinstellung bei der Erstinstallation: 80h, bei Aufrufen
zur Änderung einer installierten Version: 00h; Intervall bei der
Erstinstallation: 80h..0FDh, bei Aufrufen zur Änderung einer in-
stallierten Version: 00h..0FDh)
'mmmm' ist die Anzahl zu lesender Bytes.
(dez., Voreinstellung: 256-nnnn, Intervall: 0..(256-nnnn))
Der Zusatz ,N unterdrückt die Interpretierung der Zeichen der Datei
(keine Kommentare, keine Umwandlung von CR/LFs, kein zusätzliches
Null-Wort als Endekennung).
Falls ein Schalter nicht angegeben werden soll, ein folgender aber
doch, muß der weggelassene Schalter durch ein Komma angegeben
werden.
Beispiel: &psp.inp,,,n
Es werden nur die ersten 1024 Bytes der Datei berücksichtigt.
Die Zeilenlänge der Datei ist beliebig. Leerzeilen in der Eingabe-
Datei für '&name' führen zu einem Null-Wort im Speicher das bei der
Sicherung über den Parameter '*name' ohne den Schalter ',N' als
Ende-Kennung des zu sichernden Speicherbereichs genommen wird.
Falls der Parameter '&name' erfolgreich ausgeführt werden konnte,
wird folgende Meldung auf die Standard-Ausgabe ausgegeben:
xxxxx Bytes aus der Datei <name>
nach nnnnh:mmmmh eingelesen
Hierbei wird nnnn durch das PSP-Segment der veränderten MDEBUG-
Version und mmmm durch den Offset ab dem die Datei eingelesen wurde
ersetzt. xxxx ist die Anzahl der übernommen Bytes, also nicht unbe-
dingt die Anzahl der gelesenen Bytes da CR und LF hier als ein
Zeichen gelten (falls der Schalter ',N' nicht angegeben ist).
Falls der Parameter 'SET' angegeben ist, wird das PSP der residen-
ten Version als Zielbereich genommen (falls vorhanden).
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 16
*name{,{nnnn}}{,{mmmm}}{,N}
Sichern des PSP einer residenten Version von MDEBUG in einer Datei.
'name' ist der Name (evtl. inclusive Pfad) der zu erstellenden
Datei. Hinter dem '*' und vor und hinter den Kommata dürfen keine
Leerzeichen stehen.
Die Bytes im PSP ab dem Offset 'nnnn' bis zum ersten Null-Wort bzw.
bis zum Offset 'nnnn+mmmm' werden in die Datei 'name' geschrieben.
Dabei werden einzelne Null-Bytes in CR/LF-Sequenzen umgesetzt.
'nnnn' ist der Offset im PSP ab dem die Byte geschrieben werden
sollen. (hex., Voreinstellung: 0h, Intervall: 0..0FFh)
'mmmm' ist die Anzahl der Bytes die maximal geschrieben werden
sollen. (dez., Voreinstellung: 256-nnnn, Intervall: 0..(256-nnnn))
Der Zusatz ',N' unterdrückt die Umwandlung von Null-Bytes in CR/LF-
Sequenzen und die Interpretierung von Null-Worten als Endekennung.
Falls ein Schalter nicht angegeben werden soll, ein folgender aber
doch, muß der weggelassene Schalter durch ein Komma angegeben
werden.
Falls die Datei schon existiert, wird sie überschrieben.
Falls der Parameter '*name' erfolgreich ausgeführt werden konnte,
wird folgende Meldung auf die Standard-Ausgabe ausgegeben:
xxxxx Bytes aus dem PSP ab nnnnh:mmmmh in die Datei
<name> gespeichert.
Hierbei wird nnnn durch das PSP-Segment der benutzten MDEBUG-
Version, mmmm durch den Offset ab dem die Bytes geschrieben wurden
und xxxx durch die Anzahl der geschriebenen Bytes ersetzt. xxxx
ist die Größe der Datei die größer als der Parameter mmmm sein
kann, da hier CRs und LFs als jeweils ein Zeichen gezählt werden
(falls der Parameter ',N' nicht angegeben wurde).
Der Parameter ist nur wirksam bei Aufrufen zur Änderung einer schon
installierten Version von MDEBUG. Falls die Parameter '&name' und
'*name' gleichzeitig angegeben sind, wird, falls möglich, zuerst
der Parameter '*name' ausgeführt. Sollte in diesem Fall ein Fehler
beim Ausführen des Parameters '*name' auftreten, wird der Parameter
'&name' auch nicht mehr ausgeführt.
Die Dateinamen für '&name' und '*name' können identisch sein.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 17
HELP{={pfad}{name}}
Online-Hilfe installieren
'name' ist der Name (inclusive Pfad) oder nur der Pfad (abgeschlos-
sen mit '/', '\' oder ':') einer Hilfstextdatei. Vor und hinter dem
Zeichen '=' darf kein Leerzeichen stehen.
Voreinstellung für 'name' ist 'MDEBUG.HLP'.
Diese wird im aktuellen Verzeichnis und, falls sie dort nicht
gefunden wird, im Verzeichnis in dem die Datei 'MDEBUG.COM' steht
gesucht.
Der Inhalt der gelesenen Datei kann in MDEBUG über die Taste <F1>
in einem separatem Fenster angezeigt werden.
Nach der Installation von MDEBUG wird die Datei nicht mehr benö-
tigt. Die Datei kann maximal 20480 Byte groß sein, bei größeren
Dateien werden nur die ersten 20480 Bytes gelesen und es wird eine
Warnung ausgegeben. Der Speicherbedarf von MDEBUG steigt bei ge-
ladener Online-Hilfe um ca. 3000 Byte plus die Anzahl Byte für den
Puffer für den Hilfstext.
Hinweis: Die Größe des eingerichteten Puffers für den Hilfstext
kann bis zu 15 Byte größer als die Länge der Hilfstext-
datei sein, da MDEBUG die Größe des Puffers so rundet, daß
der Speicherblock für MDEBUG genau auf einer Paragraphen-
grenze endet.
Falls schon eine Version von MDEBUG installiert ist, kann über den
Parameter 'HELP' eine neue Hilfstextdatei in die residente Version
eingelesen werden. In die residente Version werden nur soviele
Zeilen übernommen, wie in deren Puffer passen. Der Inhalt des
Puffers der residenten Version wird dabei überschrieben.
NOHELP
Online-Hilfe nicht laden. (Voreinstellung)
'NOHELP' setzt den Parameter 'BUF' nicht außer Kraft.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 18
BUF=nnnn
Routinen für die Online-Hilfe und einen Puffer für den Hilfstext
resident halten.
'nnnn' ist die Größe des Puffers für den Hilfstext.
(dez, Intervall: 256..20480 oder 0)
Eine Hilfstextdatei wird durch diesen Parameter nicht geladen, d.h.
die Online-Hilfe ist in MDEBUG nicht verfügbar, solange nicht ein
Aufruf mit dem Parameter 'HELP' erfolgt. Wird für 'nnnn' 0 angege-
ben, so wird, falls der Parameter 'HELP' nicht angegeben ist, die
Online-Hilfe nicht geladen.
Falls der Parameter 'HELP' angegeben ist, und die durch diesen
geladene Hilfstextdatei größer als die Angabe für den Puffer ist,
wird der Parameter 'BUF' ignoriert. Falls der angegebene Wert
größer als die geladene Hilfstextdatei ist, wird ein dem bei 'BUF'
angegebenen Wert entsprechender Puffer eingerichtet, so daß später
auch noch größere Hilfstextdateien eingelesen werden können.
Der Parameter 'BUF' überschreibt den Parameter 'NOHELP'.
Hinweis: Die Größe des eingerichteten Puffers für den Hilfstext
kann bis zu 15 Byte größer als der angegebene Wert für
den Parameter 'BUF' sein, da MDEBUG die Größe des Puffers
so rundet, daß der Speicherblock für MDEBUG genau auf
einer Paragraphengrenze endet.
TEXT{=nnnn}{,m}
Keine Überprüfung ob der Bildschirm im Graphikmodus ist beim Aufruf
über den Hotkey bzw. User-Int.
'nnnn' ist das Segment des Bildschirmspeicher (hex, vierstellig).
Falls 'nnnn' angegeben ist, geht MDEBUG immer davon aus, daß der
Bildschirmspeicher bei 'nnnn:0000' beginnt. Die Voreinstellung für
'nnnn' ist im Videomodus 7 (= HGC-Karte) B000h und sonst B800h.
'm' ist die zu benutzende Bildschirmseite. (dez., Intervall: 0..9,)
Falls 'm' nicht angegeben ist, wird die Bildschirmseite bei jedem
Aufruf neu ermittelt.
Falls die zu benutzende Bildschirmseite explizit angegeben ist,
geht MDEBUG immer davon aus, daß eine Bildschirmseite 4096 Bytes
lang ist, d.h. der Bildschirm in einem Modus mit 80 x 25 Zeichen
ist. Falls die Bildschirmseite 2 angegeben ist und das Segment für
den Bildschirmspeicher mit B800h angegeben ist, beginnt die von
MDEBUG zu benutzende Bildschirmseite bei B800h + 200h = BA00h.
Über den Parameter 'TEXT' können die Ausgaben von MDEBUG auch auf
einen zweiten Bildschirm umgeleitet werden. In diesem Fall sollte
der Parameter immer in der Form 'TEXT=nnnn,m' angegeben werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 19
GRAPH
Überprüfung des Bildschirm- und Graphikmodus und Ermittlung der
aktuellen Bildschirmseite bei jedem Aufruf über den Hotkey oder
den User-Int. Falls der Parameter 'GRAPH' nach dem Parameter 'TEXT'
angegeben wird, werden alle durch den Parameter 'TEXT' gesetzten
Werte zurückgesetzt. ('GRAPH' ist Voreinstellung)
REALCURSOR=n
Über diesen Parameter kann festgelegt werden, ob MDEBUG während
eines Popup-Aufrufes den Hardware-Cursor ausschalten soll (n = 1)
oder nicht (n = 0). Falls REALCURSOR=0 ist, benutzt MDEBUG im resi-
denten Teil keinen BIOS-Interrupt.
LOADx
Mit diesem Parameter kann festgelegt werden, ob der residente Teil
von MDEBUG in einen Speicherbereich oberhalb von A000h verschoben
werden soll (x = H) oder nicht (x = L). Voreinstellung für x ist L.
Falls der Parameter in der Form 'LOAD' angegeben wird, wird der
aktuelle Wert von x umgeschaltet. Falls der Parameter 'LOADH' ange-
geben wird, und kein freier Speicherbereich in der benötigten Größe
oberhalb von A000h vorhanden ist (z.B. bei DOS-Versionen vor 5.00
ohne speziellen Speichermanager oder falls alle Blöcke oberhalb von
A000h schon belegt sind), wird der residente Teil von MDEBUG im
Speicherbereich unterhalb von A000h belassen. Der Parameter wird
nur bei der Installation von MDEBUG berücksichtigt.
PRO=nn
Festlegen der Prozessnummern, über die MDEBUG mit externen Treibern
kommuniziert. 'nn' ist die Prozessnummer für die Kommunikation mit
dem Bildschirmtreiber. (hex., Intervall: C0h..FFh, Voreinst.: D0h)
nn+1 ist die Prozessnummer für die Kommunikation mit den Kommando-
treibern.
Hinweis:
Die von MDEBUG zu benutzenden Prozessnummern dürfen nicht von ande-
ren Programmen oder Prozessen belegt sein!
(siehe 'Aufruf von MDEBUG im Graphikmodus' und 'Erweiterungen von
MDEBUG')
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 20
?
Ausgabe der Syntaxhilfe für den Aufruf von MDEBUG
Die eventuell zusätzlich angegebenen Parameter werden nur auf die
Syntax geprüft und die Voreinstellungen in der Syntaxhilfe werden
durch sie überschrieben. Die Parameter werden aber NICHT weiter
bearbeitet.
Da die Syntaxhilfe nicht auf eine Bildschirmseite passt, sollte sie
über die DOS-Ausgabe-Umleitung mittels '>' oder '|' in eine Datei
oder auf ein Gerät gelenkt werden.
In einer geclonten Version von MDEBUG (siehe Parameter 'MAKE')
werden natürlich die veränderten Voreinstellungen angezeigt.
DEF
Der Parameter 'DEF' bewirkt die Ausgabe der aktuellen Voreinstel-
lungen für die Parameter auf die Standard-Ausgabe. Die Aufrufsyntax
von MDEBUG wird aber nicht ausgegeben.
Die eventuell zusätzlich angegebenen Parameter werden nur auf die
Syntax geprüft und die Voreinstellungen in der Syntaxhilfe werden
durch sie überschrieben.
#
Der Parameter '#' veranlasst MDEBUG zur Ausgabe mehrerer interner
Tabellen. Nach der Ausgabe dieser wird das Programm sofort beendet.
Alle anderen Parameter werden nicht ausgeführt.
(siehe 'Ändern der Tastenbelegung von MDEBUG')
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 21
MAKE
Erstellen einer neuen Version von MDEBUG.COM
Mit dem Parameter 'MAKE' kann eine neue Version von MDEBUG.COM
erstellt werden. In dieser sind dann die Voreinstellungen durch die
zusätzlich zum Parameter 'MAKE' angegebenen Parameter ersetzt.
Die Voreinstellungen für folgende Parameter können überschrieben
werden:
'INT', 'KEY', 'STD', 'STM',
'CoM', 'CoD', 'CoHm', 'CoC'
'RoM', 'RoD', 'RoH',
'SEG=nnnn', 'SEG=reg', 'OFF=nnnn', 'OFF=reg',
'TEXT', 'GRAPH', 'REALCURSOR', 'PRO',
'HELP', 'NOHELP', 'BUF', 'LOADx'
Die Parameter
'STH', 'SET', 'EXIT','&name','*name', '#',
'DEF' und '?'
können nicht zusammen mit dem Parameter 'MAKE' angegeben werden.
(siehe 'Installieren von MDEBUG')
Die neue Version von 'MDEBUG.COM' wird in das aktuelle Directory
geschrieben. Eine dort schon existierende Kopie von 'MDEBUG.COM'
wird in 'MDEBUG.BAK' umbenannt; eine schon bestehende Datei mit dem
Namen 'MDEBUG.BAK' wird in jedem Fall gelöscht. Nach der Erstellung
der neuen Version von MDEBUG.COM wird das Programm beendet.
Der Parameter 'MAKE' ist nur in der Vollversion von MDEBUG möglich!
MF2
veraltet, wird ignoriert (wg. Aufwärtskompabilität)
NoMF2
veraltet, wird ignoriert (wg. Aufwärtskompabilität)
@
Rest der Parameter ignorieren.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 22
Die Schreibweise (groß/klein) und die Reihenfolge der Parameter
sind beliebig. Die Reihenfolge der Operanden und Schalter der
Parameter muß eingehalten werden. Leerzeichen in einem Parameter
sind nicht erlaubt; Leerzeichen und Tabulatoren zwischen den Para-
metern sind erlaubt aber nur hinter Zahlenwerten notwendig.
Falsche Parameter führen zum Programmabbruch; bei mehrmaliger
Angabe eines Parameters, bzw. sich ausschließender Parameter, gilt
die letzte korrekte Angabe.
Eckige Klammern '[..]' kennzeichnen eine Auswahl, also entweder
den Teil vor dem Zeichen '|' oder den Teil danach. Geschweifte
Klammern '{..}' zeigen an, daß der Parameter(-Teil) optional ist.
Hexadezimale Werte können mit oder ohne abschliessendem 'H' (bzw.
'h') eingegegeben werden. Bei dezimalen Werten können Punkte zur
Formatierung des Wertes benutzt werden.
Fehlerfrei angegebene Parameter, die bei der Erstinstallation
keine Bedeutung haben, führen nur zur Ausgabe einer Warnung (ohne
Abbruch des Programms. Das Gleiche gilt für Parameter, die bei
Aufrufen zur Änderung einer installierten Version keine Bedeutung
haben.
Eine mehrfache Installation von MDEBUG ist nicht möglich, falls
die Kette der MCBs fehlerfrei ist und die schon installierte
Version darüber auffindbar ist.
Bei jedem Aufruf gibt MDEBUG den Hotkey, die Nummer des User-Ints
(falls installiert), die Größe des Puffers für den Hilfstext
(falls installiert) und die Prozessnummern für den Interrupt 2Fh
auf die Standard-Ausgabe aus.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 23
Errorlevel
──────────
MDEBUG gibt beim Programm-Ende einen Errorlevel größer als 80 zu-
rück, falls ein Fehler auftrat.
Voreinstellungen
────────────────
Folgende Register und Speicherstellen von MDEBUG werden bei der
Installation mit einer Voreinstellung belegt:
Im Register R1 wird von MDEBUG der Wert 80h und im Register R2
die PSP-Adresse von MDEBUG gespeichert.
Die internen Speicherstellen, die über die Tasten <F6>, <SHFIT-F6>
und <CTRL-F6> angesprochen werden (s.u.), werden ebenfalls mit der
Adresse PSP-Segment:0080h geladen.
Im LowByte des Registers R3 (Register 3L) wird die Nummer des User-
Ints von MDEBUG gespeichert und im Highbyte des Registers R3
(Register 3H) wird die Basis-Prozessnummer - das ist die Prozess-
nummer für den Bildschirmtreiber - gespeichert.
Die restlichen Hilfsregister werden auf 0 gesetzt.
Die Register SE und OF werden mit der Adresse FE00:0000 belegt.
(falls die Werte für diese Register nicht durch einen Parameter an-
gegeben sind)
Die Register FS und FO werden mit der Adresse FE00:0000 belegt.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 24
Aufruf über den Hotkey
──────────────────────
Nach der Installation kann MDEBUG jederzeit über den einge-
richteten Hotkey aufgerufen werden. (siehe auch 'Vorbereitungen
vor dem Start' und 'Hinweise zur Benutzung')
MDEBUG schaltet beim Aufruf über den Hotkey sofort (noch vor der
Passwort-Abfrage) auf einen eigenen Stack um; somit ist die
Belastung des Stacks des unterbrochenen Prozesses minimal.
Ein Aufruf im Graphikmodus ist nicht möglich. Getestet wird der
Bildschirmmodus nur für CGA- und HGC-Karten, d.h. ein Aufruf ist
nur möglich falls einer der Bildschirmmodi 2, 3 (CGA) oder 7 (HGC,
Textmodus) eingestellt ist.
Falls der Aufruf nicht erlaubt ist, weil sich der Bildschirm im
Graphik-Modus befindet oder aber MDEBUG noch aktiv ist, wird er
unterdrückt. Beim Aufruf im Graphikmodus ertönt zusätzlich ein
Fehlerton.
Wenn der aktuelle Bildschirm-Modus von MDEBUG nicht korrekt
erkannt wird, muß der Parameter 'TEXT' beim Aufruf angegeben
werden. (s.o., oder ein Bildschirmtreiber geladen werden, s.u.)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 25
Beschreibung des Monitors
─────────────────────────
Aufbau des Monitor-Fensters
───────────────────────────
┌──> oberes Window des Monitors
│
│┌──> 'Offset: 1CB3' ->> Offset der akt. Cursorposition (= Konstante CU, s.u.)
││ [...] = Wert des akt. Bytes in verschiedenen Formaten
││ ┌─> Monitor-Schalter
││ │
││╔═══════════════════════════════ MDEBUG V2.05 ═══════[b*]════════════════════╗
││║ SE:OF Adr.: B000:1CA0 SE: B000 OF: 1CA0 Suchen: ║
│└╟──────┬─ Offset: 1CB3 [= 20h = #032 = ' ']───────────────┬──────────────────╢
├─║ 1CA0 │ 70 BA 70 BA 70 36 70 B3 70 20 70 30 70 30 70 30 │ p║p║p6p│p p0p0p0 ║
│ ║ 1CB0 │ 70 30 70 20 70 B3 70 20 70 BA 70 20 70 42 70 75 │ p0p p│p p║p pBpu ║
│ ║ 1CC0 │ 70 73 70 79 70 2D 70 46 70 6C 70 61 70 67 70 20 │ pspyp-pFplpapgp ║
└─║ 1CD0 │ 70 3D 70 20 70 30 70 30 70 20 70 20 70 44 70 49 │ p=p p0p0p p pDpI ║
┌─║ │ ── FS:FO => 3000:1A10 ────────────────────────── │ ║
│┌╢ 1A10 │ 70 4D 70 20 70 20 70 BA 70 20 70 38 70 20 70 30 │ pMp p p║p p8p p0 ║
││║ 1A20 │ 70 42 70 20 70 3D 70 20 70 30 70 32 70 36 70 31 │ pBp p=p p0p2p6p1 ║
│├║ 1A30 │ 70 3A 70 30 70 30 70 31 70 45 70 20 70 20 70 4D │ p:p0p0p1pEp p pM ║
││╚══════╧══════════════[ (c) 1988 - 1992 Bernd Schemmer ]══╧══════════════════╝
││ ├──┘ ├──────────────────────────────────────────────┘ ├──────────────┘
││ │ │ │
││ │ └──> Speicherinhalt in hexadezimalem Format └──> Speicherinhalt
││ │ als ASCII-Codes
││ └──> Offset des Speicherbereichs in der Zeile
││
│└──> unteres Window des Monitors
│
└───> Statuszeile des unteren Windows des Monitors inclusive
der Anzeige der Inhalte der Register FS und FO
Hinweis:
Für die folgenden Ausführungen gelten folgende Vereinbarungen:
Mit 'Fenster' ist immer der gesamte Monitor gemeint, mit 'Window'
immer die 'Teilfenster' zur Anzeige von jeweils einem Speicher-
bereich im Monitor.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 26
Der Inhalt des Monitor-Fensters, wird fortlaufend aktualisiert -
auch wenn der Interpreter aktiv ist.
Ausnahme:
Nach Eingabe des Prefixzeichens <CTRL-P> im Interpreter bzw. in der
3. Spalte des Monitors ist die Aktualisierung des Monitor-Inhaltes
bis zur Eingabe der nächsten Taste blockiert.
Bei der Eingabe eines Suchstrings, während der Suche eines Strings
im Monitor, während der Bearbeitung eines oder mehrerer Inter-
preter-Befehl(e) und während des Aufrufs der Online-Hilfe wird
die Anzeige des Monitors ebenfalls nicht aktualisiert.
Auf den oberen Rahmen werden die akutellen Werte der Schalter des
Monitors angezeigt ([...]):
┌──────────┬───────┬──────────────────────────────────┬───────────┐
│ Schalter │ Wert │ Bedeutung │ Taste │
╞══════════╪═══════╪══════════════════════════════════╪═══════════╡
│ Monitor- │ b │ direkte Änderungen im Monitor │ <CTRL-B> │
│ Mode │ │ möglich │ │
│ │ B │ direkte Änderungen im Monitor │ │
│ │ │ NICHT möglich │ │
├──────────┼───────┼──────────────────────────────────┼───────────┤
│ Update- │ * │ Monitor-Inhalt wird laufend │ <F9> │
│ Mode │ │ aktualisiert │ │
│ │ - │ Monitor-Inhalt wird nur nach │ │
│ │ │ einem Tastendruck aktualisiert │ │
└──────────┴───────┴──────────────────────────────────┴───────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 27
■ Aufbau der ersten Statuszeile
┌─> Inhalt des Registers SE (hex.)
│ ┌─> Inhalt des Registers OF
│ │ (hex.)
╔════════════════════════════│════════│═════════════════...════════╗
║ SE:OF Adr.: B000:1CA0 SE:│B000 OF:│1CA0 Suchen: ║
╟ ┌─── ┌──────── └──── └──── ┌────────... ╢
│ │ └─> Puffer für die
│ │ Eingabe eines
│ │ Suchstrings
│ └─> Adresse des Speicherbereichs der im oberen Window
│ angezeigt wird (Segment-Feld : Offset-Feld)
│
└─> Namen der Register, aus denen die Start-Adresse des Monitors
ermittelt wird. Die hier stehende Register-Kombination wird im
weiteren als Monitor-Start-Adresse bezeichnet.
■ Aufbau der zweiten Statuszeile
║ ── FS:FO => 3000:1A10 ────────────────────────── ... ║
┌─── ┌───
│ └─> Inhalt des Registers FO (hex.)
└─> Inhalt des Registers FS (hex.)
Die Register FS und FO bilden die Startadresse für das untere
Monitor-Window.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 28
Tastenbelegung im Monitor
─────────────────────────
Die folgenden Tasten sind in allen Spalten und bei der direkten
Eingabe des Segments und des Offsets verfügbar:
■ <F1>
Aufruf der Online-Hilfe, falls sie geladen ist.
Ansonsten hat die Taste keine Wirkung.
■ <CTRL-F1>
Anzeige des DOS-Bildschirms und Warten auf einen Tastendruck. Nach
der Eingabe einer Taste fährt MDEBUG fort. Die gedrückte Taste wird
ignoriert.
■ <CTRL-PgUp>, <CTRL-PgDn>
Verschieben des Monitor-Fensters um 1 Zeile nach oben bzw. unten.
Die neuen Fensterkoordinaten des Monitors sind bis zur nächsten
Änderung gültig.
■ <F9>
Laufende Aktualisierung der Monitor-Anzeige ein- oder ausschalten.
Falls die laufende Monitor-Aktualisierung ausgeschaltet ist, wird
die Anzeige des Monitors nur nach jedem Tastendruck aktualisiert.
Der aktuelle Modus wird immer auf dem oberen Rahmen des Monitors
angezeigt ('*' -> ein, '-' -> aus).
■ <ALT-F9>
Bildschirmdaten neu ermitteln und das Fenster neu aufbauen. Stellt
MDEBUG bei der Ermittlung der Bildschirmdaten einen falschen Bild-
schirmmodus fest, so wird der Aufruf beendet.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 29
■ <F2>
Editieren eines Suchstrings, der im Speicher gesucht werden soll.
Der Suchstring kann maximal 21 Zeichen lang sein.
Gesucht wird ab dem zweiten im ersten Window des Monitors angezeig-
ten Byte bis zum Ende des ersten Megabytes des Speichers. Falls
der Suchstring gefunden wird, wird die Monitor-Start-Adresse mit
der Adresse des Suchstrings geladen und ein Ton ausgegeben.
Die gefundene Adresse wird dabei folgendermaßen konvertiert:
Falls die Adresse VOR dem ersten MCB oder HINTER dem letzten MCB
liegt, wird sie in die Form 'nn00:nnnn' (n <= 0 <= F) konvertiert.
Liegt die Adresse in den ersten 65.535 Byte eines Speicherblocks
der über die MCB-Kette verwaltet wird, so wird sie in die Form
'seg:nnnn' konvertiert, wobei seg das Segment des Speicherblocks,
in dem die Adresse liegt, ist. Sollte diese Form für die Adresse
nicht möglich sein, so wird sie in der Form 'nn00:nnnn' ausgegeben.
Hinweis:
Die für die Suche benötigte Zeit wird bestimmt durch die Häufigkeit
des ersten direkt angegebenen Zeichens im Suchstring.
Die Suche kann über die BREAK-Taste abgebrochen werden. (siehe
Beschreibung des Interpreters)
■ <SHIFT-F2>
Suche des Suchstrings ab dem zweiten Byte in dem im ersten Window
angezeigten Speicherbereich fortsetzen. Falls der Suchstring
gefunden wird, wird die Monitor-Start-Adresse auf die gefundene
Speicherstelle gesetzt. Ansonsten wird die Anzeige nicht verändert.
Die Suche kann über die BREAK-Taste abgebrochen werden. (siehe
Beschreibung des Interpreters)
■ <F4>
Aufruf des Interpreters
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 30
■ <SHIFT-F6>
Speichern der aktuellen Monitor-Start-Adresse.
Eine Schachtelung ist nicht möglich.
■ <F6>
Restaurieren der Monitor-Start-Adresse mit der durch <SHIFT-F6>
gespeicherten Adresse.
■ <CTRL-F6>
Vertauschen der aktuellen Monitor-Start-Adresse mit der durch die
Taste <SHIFT-F6> gespeicherten Adresse.
■ <ALT-CursorUp>, <ALT-CursorDown>
Zeilenweises Scrollen des unteren Windows des Monitors.
■ <ALT-PgUp>, <ALT-PgDn>
Seitenweises Scrollen des unteren Windows des Monitors.
■ <CTRL-CursorDown>, <CTRL-CursorUp>
Verkleinern bzw. Vergrößern des unteren Windows
■ <ESC>
Verlassen von MDEBUG
Der durch den Aufruf von MDEBUG unterbrochene Prozess wird fort-
gesetzt. Ein Neuaufruf von MDEBUG startet im Monitor.
■ <F10>
Verlassen von MDEBUG, ein Neuaufruf von MDEBUG startet im Inter-
preter.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 31
Zusätzliche Tastenbelegung in der 2. und 3. Spalte:
■ Cursor-Tasten
Verändern des Offsets des im oberen Windows angezeigten Speicher-
ausschnittes. (nach 0FFFFh folgt 0h - ohne Veränderung des Segments
im Segment-Register, das obere Window wird also gescrollt) Beim
Scrollen des Windows wird der Wert des Registers, aus dem der
Offset für das Window ermittelt wird, verändert.
Zur Positionierung des Cursors und zum Scrollen des Windows können
folgende Tasten verwendet werden:
■ <CursorRight>, <CursorLeft>, <CursorDown>, <CursorUp>
<Blank>, <BackSpace>, <PgDn>, <PgUp>, <Home>, <End>
In der 2. Spalte können zusätzlich die Tasten <Tab> (Sprung zum
Zeilenende) und <SHIFT-Tab> (Sprung zum Zeilenanfang) verwendet
werden.
Zur Änderung des Segments muß dieses explizit geändert werden.
■ <F8>
Teilen des Monitors ab der Zeile über dem Cursor. Im unteren Window
wird der Speicherbereich ab der Adresse auf der der Cursor steht
angezeigt. D.h. die Register FS und FO werden mit dieser Adresse
geladen.
Falls schon eine Teilung in Kraft ist, wird sie gelöscht. Die Taste
<F8> ist in der ersten Zeile des Fensters gesperrt.
■ <SHIFT-F8>
Schließen des unteren Windows
■ <CTRL-F8>
Vertauschen der Adressen der Windows.
■ <F3>
Wechseln zwischen der Spalte 2 (editieren der Hex-Darstellung) und
der Spalte 3 (editieren der ASCII-Anzeige) des Monitors.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 32
In der Spalte 2 können folgende Tasten benutzt werden:
■ <+>, <->
Erhöhen bzw. Vermindern des Offsets der Monitor-Start-Adresse um 1.
■ <0>..<9>, <A>..<F>, <a>..<f>
Direkte und SOFORTIGE Änderung der aktuellen Speicherstelle falls
der angezeigte Speicherbereich im RAM liegt. (jeweils ein Nibble,
d.h. ein Halbbyte)
Im ROM oder in unbelegten Speicherbereichen kann keine Veränderung
vorgenommen werden. Ein Byte wird jeweils mit 2 Zeichen angezeigt -
für jedes Nibble eins.
■ <O>
Direkte Veränderung des Offset des anzuzeigenden Speicherbereichs
im Offset-Feld.
■ <S>
Direkte Veränderung des Segments des anzuzeigenden Speicherbereichs
im Segment-Feld.
■ <Z>
Wort an der aktuellen Cursorposition als neuen Offset für die
Anzeige des oberen Windows nehmen. Geeignet zum Durchlaufen von
mit NEAR-Zeigern verketteten Speicherstrukturen.
■ <W>
Wort an der aktuellen Cursorposition als neues Segment für die
Anzeige des oberen Windows nehmen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 33
■ <P>
Doppelwort an der aktuellen Cursorposition als neue Adresse für die
Anzeige des oberen Windows nehmen. Geeignet zum Durchlaufen von
mit FAR-Zeigern verketteten Speicherstrukturen.
■ <M>
Falls das Byte an der aktuellen Cursorposition den ASCII-Code 'M'
enthält, wird das Wort an der Stelle 'Cursor-Position + 3' auf das
Segment der Monitor-Start-Adresse addiert und diese inkrementiert.
Der Offset der Monitor-Start-Adresse wird auf 0 gesetzt.
Falls sich also der Cursor auf dem Kennbyte eines MCBs befindet,
kann mit der Taste <M> die Adresse des nächsten MCB geladen werden.
Enthält das Byte an der Monitor-Start-Adresse nicht den ASCII-Code
'M', so wird die Monitor-Start-Adresse mit der Adresse des ersten
MCBs geladen.
■ <Y>
Ermittelt den nächsten MCB analog zur Taste <M> aber ohne Über-
prüfung, ob der Cursor auf dem Kennzeichen eines MCBs steht.
■ <L>
Setzt die Monitor-Start-Adresse auf den letzten MCB.
(max. werden 255 MCBs durchlaufen)
■ <T>
Übernimmt die Adresse des Bytes, auf dem der Cursor steht als neue
Monitor-Start-Adresse.
■ <X>
Restaurieren der letzten Start-Adresse des Monitors. MDEBUG sichert
die Start-Adresse des Monitors vor der Ausführung der Tasten <M>,
<P>, <Z>, <L>, <T> und <W>.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 34
■ <CTRL-B>
Erlaubt oder unterbindet direkte Änderungen im Monitor. Der aktu-
elle Modus wird auf dem oberen Rahmen des Fensters des Monitors
ausgegeben und ist an der Cursorform erkennbar (Overwrite-Cursor
->> Änderungen erlaubt, Insert-Cursor ->> Änderungen nicht erlaubt,
siehe Parameter CoC=nn{,mm}').
In der Spalte 3 gilt folgende Tastenbelegung:
■ <CTRL-P>
Prefixzeichen, d.h. die nach <CTRL-P> eingegebene Taste wird nicht
interpretiert sondern so übernommen.
■ <ESC>
Verlassen von MDEBUG
■ Alle anderen Tasten verändern SOFORT die aktuelle Speicherstelle
(auch Steuerzeichen wie <Tab>, <RETURN>, usw.)
Die Tastenbelegung bei der Eingabe von Segment oder Offset ist fol-
gendermaßen:
■ <0>..<9>, <A>..<F>, <a>..<f>
Hexadezimale Eingabe des neuen Wertes des aktuellen des Register-
Wertes. Die Anzeige wird nach jeder Änderung eines Nibbles sofort
angepasst.
■ <CursorLeft>, <CursorRight>, <End>, <Home>
Cursor-Positionierung, durch die Eingabe von <CursorLeft> am
Anfang des Offset-Feldes kann in das Segment-Feld und durch die
Eingabe von <CursorRight> am Ende des Segment-Feldes kann in das
Offset-Feld gewechselt werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 35
■ <O>
Eingabe eines neuen Offsets für das obere Window im Offset-Feld.
■ <S>
Eingabe eines neuen Segments für das obere Window im Segment-Feld.
■ <RETURN>
Rückkehr in die Spalte 2 bzw. 3.
Die Tastenbelegnung bei der Eingabe des Suchstrings ist:
■ Erlaubt sind alle Zeichen. Zeichen mit einem ASCII-Code kleiner
als 32 (dez.) müssen über <ALT-ASCIINummer> eingegeben werden.
Die Zeichen mit den ASCII-Codes 13 (<RETURN>), 27 (<ESC>) und
8 (<BackSpace>) müssen nach dem Prefix-Zeichen <CTRL-P> einge-
geben werden. Funktionstasten ohne Bedeutung werden ignoriert.
Leerzeichen im Suchstring sind erlaubt, der Suchstring kann aber
nicht mit einem Leerzeichen enden. Das Zeichen ■ (ASCII-Code 254)
gilt als Joker im Suchstring.
■ <F1>
Aufruf der Online-Hilfe, falls sie geladen ist.
Ansonsten hat die Taste keine Wirkung. (s.o.)
■ Die Tasten
<CursorRight>, <CursorLeft>, <Home>, <End>, <Delete>,
<BackSpace>
können bei der Eingabe zum Positionieren des Cursor im Suchstring
benutzt werden. Die Eingabe erfolgt immer im INSERT-Modus.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 36
■ <CTRL-End>
Löschen des Eingabepuffers für den Suchstring ab der Cursorposition
bis zum Schluß.
■ <ESC>
Editieren des Suchstrings abbrechen, der Suchstring wird aber nicht
gelöscht.
■ <RETURN>
Editieren des Suchstrings beenden und Suchvorgang starten.
Hinweis:
Falls im Monitor der Inhalt des Registers FS bzw. FO verändert
werden soll, muß mensch folgendermaßen vorgehen:
Zuerst die Windows des Monitors durch <CTRL-F8> vertauschen. Nun
über die Taste <O> bzw. <S> ins Segment- bzw. Offset-Feld springen
und den Wert ändern. Und zum Schluß über die Taste <CTRL-F8> die
Windows wieder tauschen.
Analog muß vorgegangen werden, falls direkte Änderungen in dem im
unteren Fenster angezeigten Speicherbereich vorgenommen werden
sollen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 37
Beschreibung der Online-Hilfe
─────────────────────────────
Aufbau des Fensters der Online-Hilfe
────────────────────────────────────
┌────────────── Text der Online-Hilfe (akt. Ausschnitt)
│ ┌────────── Überschrift der Online-Hilfe (wird immer angezeigt)
│ │
│ │ ┌─ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ─┐
│ └─>. ─── Hilfstext für MDEBUG V2.05 ─────────────── (c) 1992 Bernd Schemmer ─── .
├───>. Tastenbelegung im Monitor .
│ . .
│ . CTRL-PgUp - Fenster nach oben CTRL-PgDn - Fenster nach unten .
│ . CTRL-F1 - Programm-Pause ALT-F9 - Fenster neu aufbauen .
│ . F2 - Suchen eines Strings SHIFT-F2 - Suche wiederholen .
│ . F3 - Wechsel der akt. Spalte F4 - Interpreter aufrufen .
│ . F9 - lfd. Akt. ein/aus F6 - akt. Adr. rest. .
│ . SHIFT-F6 - akt. Adresse speichern CTRL-F6 - akt. Adr. tauschen .
│ . F8 - Monitor-Fenster an der akt. Stelle teilen .
└───>. SHIFT-F8 - unteres Monitor-Fenster schliessen .
┌───>.░░░9░^░░░░░2░░░░░3░░░░░░4░░░░░░░5░░░░░░░░░░░░░░░░░░░░░6░░░░░░7░░░░8░░░░░░░░░░░░░.
│ ┌─> , , PgDn, PgUp, Home, End -> Scrollen <n>/<ALT-n> [Marker] F10, ESC -> exit
│ │ └─ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ─┘
│ │
│ └────────── Tastenbelegung in der Online-Hilfe
└────────────── Scrollbar der Online-Hilfe
Die aktuelle Position im Hilfstext wird im Scrollbar durch einen
einfachen oder doppelten Pfeil (je nach aktueller Position) ange-
zeigt (in der obigen Abbildung wird der Pfeil durch das Zeichen ^
repräsentiert), die Positionen der Marker werden durch die ent-
sprechende Nummer im Scrollbar angezeigt. Falls mehrere Marker auf
einer Position stehen, wird immer nur der Marker mit der kleinsten
Nummer im Scrollbar angezeigt.
Ein Rahmen um das Fenster der Online-Hilfe wird nicht ausgegeben.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 38
Tastenbelegung in der Online-Hilfe
──────────────────────────────────
Während eines Aufrufes der Online-Hilfe gelten folgende Tasten-
belegungen:
■ <CursorUp>, <CursorDown>, <PgDn>, <PgUp>
Zeilen- bzw. Seitenweises Scrollen des Hilfstextes
■ <Home>, <End>
Sprung zur ersten bzw. letzten Zeile des Hilfstextes
■ 0
Anzeige der zuletzt angezeigten Seite
■ <ALT-1> .. <ALT-9>
Setzen des Markers # (1...9) auf die erste Zeile im Window
■ <1> .. <9>
Sprung zum Marker # (1 .. 9).
■ <CTRL-PgUp>, <CTRL-PgDn>
Verschieben des Fensters für die Online-Hilfe um jeweils eine Zeile
nach oben bzw. unten.
■ <ESC>
Verlassen der Online-Hilfe
■ <F10>
Verlassen von MDEBUG, Neustart in der Online-Hilfe
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 39
Beschreibung des Interpreters
─────────────────────────────
Aufbau des Interpreter-Fensters
───────────────────────────────
┌─────────> Inhalt der Hilfsregister R1 bis R7
│┌──────> PSP- und Code-Segment von MDEBUG (= Wert der Konstanten CS)
││┌───> Puffer für die Eingabe von Befehlen (max. 66 Zeichen)
││└────────────────┐ ┌─> Interpreter-Schalter
││ ┌─────┴─────────────────────────────────────│────────────────────────┐
││ ╔══════════════════════════════════ MDEBUG V2.05 ════[UQI]═════════════════════╗
││ ║ Befehl: ║
││ ╟────────┬──────────────────────────────────────────────────M──────────────────╢
│└──║CS: 2390│ ╓─────────── Register ─────────────────────────╖ 1 0DC9:0000 LASTBUF║
│ ║R┬──────┤ ║ AX = 0100 BX = 0324 CX = 0001 DX = 022C ║ 2 0974:0000 1. MCB ║
├───║1│ 0080 │ ║ SI = 001C DI = 035E DS = 09E6 ES = 022C ║ 3 022C:7420 1. DPB ║
├───║2│ 2390 │ ║ BP = 2DB2 SS = 022C SP = 09CC ║ 4 022C:0098 SDL ║
├───║3│ D061 │ ║ Flags = ....__I__Z___E._ ║ 5 0070:01A4 CLOCK ║
├───║4│ 0000 │ ║ R0 = $1000000001000101 = 8045 ║ 6 09E6:0000 CON ║
├───║5│ 0000 │ ║ R8 = #34150 (-#31386) = 8566 = 'áf' ║ 7 0D24:0000 BUF ║
├───║6│ 0000 │ ║ Ruecksprung-Adresse = F000:E830 ║ 8 0F76:0000 PRet ║
└───║7│ 0000 │ ║ Busy-Flag = 01 DIB = 022C:001E ║ 9 0A6B:0000 PFileT ║
╚═╧══════╧═╩═══════════[ (c) 1988 - 1992 Bernd Schemmer ]═╩═╩══════════════════╝
└─────────────────────┬─────────────────────┘ └──────┬──────────┘
┌──────────────────────────────────────┘ ┌──────┘
└─> AX .. SP : Inhalt der Prozessorregister └─> wichtige Adressen
Flags : Inhalt des Flagregisters aus dem DIB
R0 : Inhalt des Hilfsregisters R0 (binär und hex.) (= Memory-Speicher
R8 : Inhalt des Hilfsregisters R8 (dezimal mit und 1 bis 9)
ohne Voreichen, hexadezimal und als ASCII-Codes)
Ruecksprung-
Adresse : Adresse, an der der aktuelle Prozess nach dem Ende
des Aufrufs von MDEBUG fortgesetzt wird. Der Wert
vor dem Doppelpunkt kann über die Konstante RS,
der Wert hinter dem Doppelpunkt über die Konstante
RO benutzt werden.
Busy-Flag: = 0 -> DOS-Aufrufe sind erlaubt
<> 0 -> DOS-Aufrufe sind nicht erlaubt
Das Busy-Flag (= Konstante DO) ist der Wert des
DOS-Busy-Flags verODERt mit dem Wert des Critical-
Error-Flags.
DIB : Adresse des DOS-Info-Blocks (DIB, = Memory-Speicher 0)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 40
Die Bedeutungen der angezeigten Adressen aus dem DIB sind wie folgt:
(ab DOS 3.3, DIB = DOS-Info-Block oder auch 'List of Lists')
┌─┬────────┬─────────────────────────────────────────────┐
│M│ Name │ Bedeutung │
╞═╪════════╪═════════════════════════════════════════════╡
│1│LASTBUF │ Adresse des letzten (= aktuellen) Puffers │
│2│1. MCB │ Adresse des ersten Memory-Control-Blocks │
│3│1. DPB │ Adresse des ersten Disk-Parameter-Blocks │
│4│SDL │ Adresse der System-Dateienliste │
│5│CLOCK │ Adresse des CLOCK-Device-Headers │
│6│CON │ Adresse des CON-Device-Headers │
│7│BUF │ Adresse des ersten Puffers │
│ │ │ (DOS 4+: Adresse des Puffer-Info-Blocks) │
│8│PRet │ Adresse der Laufwerks-Tabelle │
│9│PFileT │ Adresse der FCB-Liste │
└─┴────────┴─────────────────────────────────────────────┘
Für die Anzeige der Flags werden folgende Zeichen verwendet:
┌──────────┬────────────────────────┐ Falls ein Flag gesetzt ist,
│Buchstabe │ gesetztes Flag │ wird der entsprechende Buch-
╞══════════╪════════════════════════╡ stabe, bzw. ein Punkt falls
│ O │ Overflow-Flag │ das Flag ohne Bedeutung ist,
│ D │ Direction-Flag │ angezeigt. Nicht gesetzte
│ I │ Interrupt-Enable-Flag │ Flags werden durch einen
│ T │ Trap-Flag │ Unterstrich angezeigt.
│ S │ Sign-Flag │
│ Z │ Zero-Flag │ Hinweis für 80286er/80386er:
│ A │ Auxiliary-Flag │
│ E │ Parity-Even-Flag │ Es werden nur die Flags, die
│ C │ Carry-Flag │ auch dem 8086 bekannt sind
└──────────┴────────────────────────┘ angezeigt.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 41
Alle expliziten Werte ohne Formatkennzeichen ('#','$') sind hexa-
dezimal. Falls ein Passwort installiert ist wird der Status des
Passwortes ('ON' oder 'OFF') auf dem oberen Rand (über 'Befehl: ')
ausgegeben. Alle Meldungen von MDEBUG werden ebenfalls auf den
oberen Rand des Fensters des Interpreters angezeigt. Sie müssen
durch eine Taste quittiert werden. Vor der Ausgabe einer Fehler-
meldung wird der Tastaturpuffer gelöscht.
Die aktuellen Werte verschiedener Schalter von MDEBUG werden eben-
falls auf den oberen Rand des Fensters ausgegeben ([...]):
┌──────────┬───────┬──────────────────────────────────┬───────────┐
│ Schalter │ Wert │ Bedeutung │ Taste │
╞══════════╪═══════╪══════════════════════════════════╪═══════════╡
│ Upcase- │ U │ Buchstaben werden in Großbuch- │ <CTRL-U> │
│ Mode │ │ staben konvertiert │ │
│ │ u │ Buchstaben werden NICHT in Groß- │ │
│ │ │ buchstaben konvertiert │ │
├──────────┼───────┼──────────────────────────────────┼───────────┤
│ Quiet- │ Q │ akustische Ausgaben sind aus- │ <CTRL-Q> │
│ Mode │ │ geschaltet │ │
│ │ q │ akustische Ausgben sind ein- │ │
│ │ │ geschaltet │ │
├──────────┼───────┼──────────────────────────────────┼───────────┤
│ Input- │ I │ Eingaben erfolgen im INSERT- │ <INSERT> │
│ Mode │ │ Modus │ │
│ │ i │ Eingaben erfolgen im OVERWRITE- │ │
│ │ │ Modus │ │
└──────────┴───────┴──────────────────────────────────┴───────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 42
Tasten-Belegung im Interpreter
──────────────────────────────
■ BREAK-Taste
Die BREAK-Taste dient zum Abbrechen von verschiedenen Befehlen
des Interpreters und des Monitors von MDEBUG. Die BREAK-Taste ist
in MDEBUG die Tastenkombination <CTRL-ScrollLock>.
■ <F1>
Aufruf der Online-Hilfe, falls sie geladen ist.
Ansonsten hat die Taste keine Wirkung.
■ <CTRL-F1>
Anzeige des DOS-Bildschirms und Warten auf einen Tastendruck. Die
gedrückte Taste wird nicht weiter bearbeitet.
■ <CTRL-PgUp>, <CTRL-PgDn>
Fenster eine Zeile nach oben/unten verschieben
Die neuen Fensterkoordinaten sind bis zur nächsten Änderung gültig.
■ <CursorDown>, <CursorUp>, <PgDn>, <PgUp>
Scrollen des oberen Windows des Monitors.
■ <GREY->, <GREY+> (aus den Nummernblock)
Erhöhen bzw. Vermindern des Offsets der Monitor-Start-Adresse um 1.
■ <F9>
Laufende Aktualisierung des Monitors ein- oder ausschalten.
Der aktuelle Modus wird immer auf dem oberen Rahmen des Monitors
angezeigt ('*' -> ein, '-' -> aus)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 43
■ <ALT-F9>
Bildschirmdaten neu ermitteln und beide Fenster neu aufbauen.
Stellt MDEBUG hierbei einen falschen Bildschirmmodus fest, so wird
der Aufruf beendet. In diesem Fall ist die Fensterstruktur beider
Fenster sehr wahrscheinlich zerstört und muß beim nächsten Aufruf
von MDEBUG im richtigen Bildschirmmodus über die Taste <ALT-F9>
jeweils restauriert werden. Durch die Taste <ALT-F9> wird der
Eingabe-Puffer des Interpreters und der Puffer für den Suchstring
im Monitor gelöscht.
■ <F3> - Passwort-Abfrage einschalten
■ <F4> - Passwort-Abfrage ausschalten
Falls ein Passwort installiert ist, kann es mit diesen beiden
Tasten ein- oder ausgeschaltet werden. Ist kein Passwort instal-
liert, haben die Tasten keine Bedeutung.
■ <F2>
Die Werte der aktuellen Register-Kombination für die Monitor-
Start-Adresse werden in die Register SE und OF übernommen. Als neue
Register-Kombination für die Monitor-Start-Adresse wird das Regis-
terpaar SE:OF genommen.
■ <SHIFT-F2>
Die Register SE und OF werden als Monitor-Start-Adresse genommen.
(Short-Cut für den Befehl 'V SE,OF', siehe unten)
■ <SHIFT-F6>
Speichern der aktuellen Monitor-Start-Adresse.
Eine Schachtelung ist nicht möglich.
■ <F6>
Restaurieren der Monitor-Start-Adresse mit der durch <SHIFT-F6>
gespeicherten Adresse.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 44
■ <CTRL-F6>
Vertauschen der aktuellen Monitor-Start-Adresse mit der durch die
Taste <SHIFT-F6> gespeicherten Adresse.
■ <F7>
Hilfsregister R1 bis R8 löschen, d.h. auf 0 setzen.
■ <F8>
Prozessor-Register auf die Werte beim Aufruf von MDEBUG setzen.
■ <SHIFT-F8>
Prozessor-Register auf die Werte vor dem Beenden des letzten Auf-
rufs von MDEBUG setzen.
MDEBUG sichert vor jedem Beenden eines Aufrufes die Werte der
Prozessor-Register. Diese können über die Taste <SHIFT-F8> beim
nächsten Aufruf wieder geladen werden.
■ <CTRL-F8>
Vertauschen der Adressen der beiden Monitor-Windows.
■ <ALT-CursorUp>, <ALT-CursorDown>
Mit diesen beiden Tasten kann das untere Window des Monitors
zeilenweise gescrollt werden. Der Inhalt des Registers FO wird ver-
ändert.
■ <ALT-PgUp>, <ALT-PgDn>
Seitenweises Scrollen des unteren Windows. Der Inhalt des Registers
FO wird verändert.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 45
■ <CTRL-CursorDown>, <CTRL-CursorUp>
Mit diesen beiden Tasten kann das untere Window jeweils um eine
Zeile verkleinert bzw. vergrößert werden.
■ Cursor-Tasten
Zur Steuerung des Cursors bei der Eingabe der Befehle können fol-
gende Tasten verwendet werden:
<CursorRight>, <CursorLeft>,
<Home>, <End>,
<CTRL-CursorRight>, <CTRL-CursorLeft>,
<Delete>, <BackSpace>
■ <Insert>
Umschalten zwischen Insert- und Overwrite-Modus. Der aktuelle Modus
ist an der Cursorform erkenntlich (siehe Parameter 'CoC=nn{,mm}')
Zudem wird der aktuelle Modus auf dem oberen Rahmen des Inter-
preter-Fensters angezeigt.
■ <CTRL-U>
Konvertierung der Zeichen in Großbuchstaben ein- oder ausschalten.
Der aktuelle Modus wird auf dem oberen Rahmen des Interpreter-
Fensters angezeigt.
■ <CTRL-Q>
Ein- oder ausschalten der akustischen Ausgabe von MDEBUG.
Der aktuelle Modus wird auf dem oberen Rahmen des Interpreter-
Fensters angezeigt.
■ <CTRL-End>
Löschen der Eingabe ab der Cursor-Position bis zum Ende des Puffers.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 46
■ <CTRL-Home>
Löschen der gesamten Eingabe.
■ <CTRL-RETURN>
Letzte Eingabe nochmal bearbeiten (ohne Editiermöglichkeit).
■ <SHIFT-RETURN>
Letzte Eingabe wieder zum Editieren freigeben.
■ <RETURN>
Eingabe bearbeiten
■ <ALT-RETURN>
Eingabe bearbeiten, aber nicht in den internen Puffer übernehmen,
d.h. die 'letzte Eingabe' für <SHIFT-RETURN> und <CTRL-RETURN>
wird nicht verändert.
Hinweis: Diese Tastenkombination funktioniert nicht auf allen PCs
korrekt.
■ <ALT-F5>
Verlassen von MDEBUG mit automatischem Neuaufruf von MDEBUG sobald
DOS nicht aktiv ist. Falls ein aktives Passwort installiert ist,
wird vor dem neuem Aufruf von MDEBUG das Passwort abgefragt.
Ein erneuter Versuch MDEBUG über den Hotkey aufzurufen setzt den
Wartezustand wieder zurück.
Der Wartezustand wird auch zurückgesetzt, falls ein Aufruf der
Funktionen 3, 4 oder 5 des User-Ints erfolgreich war.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 47
■ <F10>
Verlassen von MDEBUG, ein Neuaufruf von MDEBUG startet im Inter-
preter.
■ <ESC>
Interpreter verlassen, Rückkehr in den Monitor
■ <ALT-F10>
MDEBUG verlassen mit geänderten Register-Werten, d.h. mit den der-
zeit angezeigten Register-Werten. Ein Neuaufaufruf von MDEBUG star-
tet im Interpreter.
Normalerweise werden die Register vor dem Verlassen von MDEBUG auf
die Werte beim Start des Aufrufs gesetzt.
Warnung: Diese Taste sollte nur mit großer Vorsicht eingesetzt
werden!
■ <CTRL-F10>
Abbrechen des beim Aufruf unterbrochenen Prozesses. MDEBUG führt
hierzu die Funktion 4Ch des DOS-Interrupts 21h aus.
Dabei wird ausgenutzt, daß DOS immer noch davon ausgeht, daß es
sich im unterbrochenen Prozess befindet und somit der Interrupt
sich auf diesen Prozess bezieht.
Als Fehlercode (Errorlevel) wird der aktuelle Wert aus dem Register
AL zurückgegeben. Die Funktion dient u.a. dazu, Endlosschleifen zu
beenden.
Sie sollte nur angewendet werden, wenn DOS nicht aktiv ist. (siehe
auch 'Stack-Überlauf') Falls der unterbrochene Prozess die oberste
Shell-Ebene des COMMAND.COM ist, ist die Funktion nicht möglich.
(siehe auch 'Programm-Interna')
■ <ALT-End>
Löschen des Original-Tastaturpuffers.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 48
Tastenumbelegungen im Interpreter
─────────────────────────────────
Hinweis:
Mit der Angabe '#nn' ist jeweils das Zeichen mit dem ASCII-Code
nn (dezimal) gemeint. Die so dargestellten Zeichen gelten normaler-
weise als Drucker- bzw. Datei-Steuerzeichen und stören somit den
Ausdruck der Dokumentation.
┌──────────────────┐
Folgende Tasten sind im Interpreter umbelegt: │ Belegung │
───────────────────────────────────────────── │ alt neu │
╞══════════╤═══════╡
Falls die Original-Belegung erwünscht ist, muß │ <CTRL-O> │ <|> │
vor der Eingabe der Taste das Prefixzeichen │ <ä> │ <«> │
<CTRL-P> eingegeben werden. │ <Ä> │ <»> │
Das Zeichen <CTRL-P> muß über <CTRL-P><CTRL-P> │ <ö> │ <[> │
eingegeben werden. │ <Ö> │ <]> │
│ <ü> │ <#27> │
Die Umbelegungen sind nur verfügbar, falls ein │ <Ü> │ <#26> │
deutscher Tastaturtreiber geladen ist. │ <ß> │ <¿> │
│ <_> │ <¬> │
└──────────┴───────┘
Befehle des Interpreters
────────────────────────
Hinweis:
Das Flag-Register ist ein impliziter Operand aller logischen und
arithmetischen Befehle. D.h. MDEBUG benutzt das Flag-Register
analog zur CPU. Direkte Operationen auf das Flag-Register sollten
daher im Normalfall über den MOV-Befehl erfolgen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 49
?{...}
───────────────────────────────────────────────────────────────────
Ausgabe der Nummer des User-Ints (oder 0 falls kein User-int
installiert ist) im Register AL und des Aufruf-Modus im Register
AH. Für den Aufruf-Modus gilt:
AH = 1 ->> Der Aufruf erfolgte über den Hotkey
AH = 2 ->> Der Aufruf erfolgte über den User-Int
AH = 3 ->> Der Aufruf erfolgte über den automatischen
Aufruf (Taste <ALT-F5>)
AH = 4 ->> Der Aufruf erfolgte über einen zusätzlichen
Interrupt (über den Einsprung-Offset)
im Register BX wird der Einsprung-Offset von MDEBUG zurück-
gegeben. Die aus diesem Wert als Offset und dem Codesegment von
MDEBUG als Segment gebildetete Adresse muß aufgerufen werden
(per Interrupt-Aufruf), falls der Aufruf von MDEBUG über einen
zusätzlichen Interrupt erfolgen soll. Vor dem Aufruf muß die
aufrufende Routine schon, falls nötig, den Interrupt bestätigt
haben. Eine Überprüfung, ob MDEBUG schon aktiv ist, ist nicht
erforderlich da diese durch MDEBUG selbst erfolgt.
MDEBUG verhält sich nach einem Aufruf über den Einsprung-Offset,
analog zu einen Aufruf über den Hotkey. (inclusive Bildschirm-
modus- und Passwortüberprüfung)
Beispiel:
Aufruf von MDEBUG auch über den Hardware-Interrupt 0Ch (COM1):
; diese Routine muß über einen Int-Befehl aufgerufen werden!
Int0ChRoutine:
; Aufruf der alten Int-Routine per simulierten Int-Aufruf
pushf
cli
call OldIntSegment:OldIntOffset
; Die durch den eigentlichen Int-Befehl auf den Stack gebrachte
; Rückkehr-Adresse und Flags stehen immer noch dort und werden
; von MDEBUG als Rückkehradresse und gesicherte Flags verwendet
; Der Segment-Wert für den JMP-Befehl kann z.B. über den User-
; Int ermittelt werden.
; Auf dem Stack darf nur noch die Rückkehr-Adresse für den IRET-
; Befehl stehen!
jmp CS:EinsprungOffset
; hier kommt die Routine niemals hin!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 50
weiteres Beispiel:
Aufruf von MDEBUG auch über den Software-Interrupt 7Eh:
; Hierzu reicht es aus, die Adresse für den Interrupt 7Eh in
; der Interrupt-Tabelle bei 0:0 zu ändern, z.B.
mov dx,EinsprungOffset
mov ds,CS_of_MDEBUG ; DS:DX = neue Adresse für den Interrupt
mov ax,0257Eh ; Interrupt über DOS umsetzen
int 021h
V{...} {reg1}{,}{reg2}
───────────────────────────────────────────────────────────────────
Setzt das Register reg1 als Segment-Register für das obere
Fenster des Monitors und, falls angegeben, das Register reg2 als
Offset-Register.
reg1 und reg2 müssen Wort-Register sein.
Falls der Operand reg1 korrekt erkannt wird, der Operand reg2
aber nicht, wird nur das Segment-Register des Monitors geändert.
#26{...} {seg1:}[reg1|wert1] {...}{#26}
───────────────────────────────────────────────────────────────────
Sichern der Befehlszeile ab dem ersten Zeichen hinter dem ersten
Operanden das kein Leerzeichen ist.Gesichert werden alle Zeichen
bis zum nächsten '#26'-Zeichen oder bis zum Ende des Eingabe-
Puffers (nicht der Eingabe). Hinter der gesicherten Zeichenkette
wird von MDEBUG noch ein Null-Byte als Endekennung gesetzt.
Die gesicherte Zeichenkette belegt max. 67 Zeichen; das '#26'-
Zeichen wird nicht mitgesichert.
Der Zielbereich für die Sicherung befindet sich im Speicher ab
der durch den ersten Operanden angegebenen Adresse. Der erste
Operand muß mit mindestens einem Leerzeichen enden. Die gesich-
erten Zeichen werden nicht weiter bearbeitet. Sie können mit dem
Befehl '#27' oder '#27'H (s.u.) neu in den Eingabepuffer über-
nommen werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 51
Beispiel:
Die Eingabe
M OF,80 ^ #26 OF+2 M R7,BX ^ ? #26 ^ M CX,0
wird folgendermaßen bearbeitet:
1. Das Register OF wird auf den Wert 80h gesetzt.
2. Als Offset für den Befehl zum Sichern der Eingabezeile wird
82h ermittelt, als Segment wird das Segment des Monitors
genommen. Die Leerzeichen hinter dem ersten Operanden des
'#26'-Befehls ('OF+2') werden überlesen.
3. Die Teileingabe
'M R7,BX ^ ? '
wird in den Speicher ab der Adresse MonitorSegment:0082h, mit
einem Null-Byte als Endekennung versehen, übertragen. Die
Teil-Eingabe wird nicht weiter bearbeitet.
4. Das Register CX wird auf 0 gesetzt.
Das Zeichen '#26' liegt im Interpreter auf der Taste <Ü>.
#27{...} {seg1:}[reg1|wert1]
───────────────────────────────────────────────────────────────────
Restaurieren des Eingabe-Puffers aus dem Null-String ab der
Speicherstelle die der Operand bezeichnet.
Falls der String zu lang ist, werden nur die ersten 66 Zeichen
des Strings übernommen. Der gelesene String kann nach dem Befehl
im Eingabepuffer editiert werden.
Der Eingabe-Puffer wird vor der Übernahme gelöscht. Das Zeichen
'#27' liegt im Interpreter auf der Taste <ü>. Der Befehlsname
darf nicht mit einem 'H' enden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 52
#27{...}H {seg1:}[reg1|wert1]
───────────────────────────────────────────────────────────────────
Der Befehl arbeitet äquivalent zum '#27'-Befehl, allerdings wird
die geladene Befehlszeile sofort bearbeitet. Der Befehlsname
muß mit einem 'H' enden.
Falls eine Endlos-Schleife programmiert wurde, kann sie über
die BREAK-Taste abgebrochen werden.
D{UMP} Mn
───────────────────────────────────────────────────────────────────
Der Inhalt des Memory-Speichers mit der Nummer n (0 <= n <= 9)
wird als neue Monitor-Start-Adresse (Segment:Offset) genommen.
Falls n gleich '0' ist, wird der Monitor auf die Adresse des DIB
(DOS-Info-Block) gesetzt.
Hinter dem 'M' darf kein Leerzeichen folgen.
P{OINTER} {seg1:}[reg1|wert1]
───────────────────────────────────────────────────────────────────
Das Doppelwort, auf das der Operand zeigt wird als neue Monitor-
Start-Adresse genommen. (INTEL-Format)
A{DD} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
Addiert den Wert des 2. Operanden auf den Wert des 1. Operanden.
S{UB} {seg1:}[reg1|wert1],{seg2}[reg2|wert2]
───────────────────────────────────────────────────────────────────
Subtrahiert den Wert des 2. Operanden vom Wert des 1. Operanden.
a{dc} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
Addiert den Wert des 2. Operanden und den Wert des Carryflags
auf den Wert des 1. Operanden. (entspricht ADC-Befehl)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 53
s{bc} {seg1:}[reg1|wert1],{seg2}[reg2|wert2]
───────────────────────────────────────────────────────────────────
Subtrahiert den Wert des 2. Operanden und den Wert des Carry-
flags vom Wert des 1. Operanden. (entspricht SBB-Befehl)
+ {seg1:}[reg1|wert1]
───────────────────────────────────────────────────────────────────
Erhöht den Wert des Operanden um 1 (entspricht INC-Befehl)
- {seg1:}[reg1|wert1]
───────────────────────────────────────────────────────────────────
Vermindert den Wert des Operanden um 1 (entspricht DEC-Befehl)
> {seg1:}[reg1|wert1]
───────────────────────────────────────────────────────────────────
Wert des Operanden um 1 Bit nach rechts shiften (entspricht SHR-
Befehl; Wirkung: op:= op DIV 2)
< {seg1:}[reg1|wert1]
───────────────────────────────────────────────────────────────────
Wert des Operanden um 1 Bit nach links shiften (entspricht SHL-
Befehl; Wirkung: op:= op MUL 2)
» {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
Wert des 1. Operanden um n Bits nach rechts shiften wobei n der
Wert des 2. Operanden ist (immer Byte). Falls n größer als 15
ist, ist das Ergebnis immer 0. Das Zeichen '«' liegt im Inter-
preter auf der Taste <Ä>.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 54
« {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
Wert des 1. Operanden um n Bits nach links shiften wobei n der
Wert des 2. Operanden ist (immer Byte). Falls n größer als 15
ist, ist das Ergebnis immer 0. Das Zeichen '«' liegt im Inter-
preter auf der Taste <ä>.
& {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
AND-Verknüpfung zwischen dem Wert des 1. und des 2. Operanden,
der Wert des 1. Operanden wird geändert.
| {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
OR-Verknüpfung zwischen dem Wert des 1. und des 2. Operanden,
der Wert des 1. Operanden wird geändert. Das Zeichen '|' liegt
im Interpreter auf der Taste <CTRL-O>.
! {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
XOR-Verknüpfung zwischen dem Wert des 1. und des 2. Operanden,
der Wert des 1. Operanden wird geändert.
T {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
AND-Verknüpfung zwischen dem Wert des 1. und des 2. Operanden
ohne Änderung des Wertes des 1. Operanden. Es werden also nur
die Flags gesetzt. (entspricht TEST-Befehl)
N{EG} {seg1:}[reg1|wert1]
───────────────────────────────────────────────────────────────────
Wert des Operanden negieren (Zweierkomplement)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 55
M{OV} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
───────────────────────────────────────────────────────────────────
Kopiert den Wert des 2. Operanden in den 1. Operanden
C{OP}Y
───────────────────────────────────────────────────────────────────
Kopieren von CX Bytes von DS:SI nach ES:DI.
Entspricht dem Befehl REP MOVSB.
Vor dem Befehl werden alle Register geladen (auch das Flag-
Register!) nach der Ausführung werden die Register-Werte korri-
giert. Es finden keinerlei Überprüfungen statt, so daß z.B. die
korrekte Richtung der Kopieraktion vom Benutzer ermittelt und
über den Wert des Direction-Flags gesetzt werden muß.
I{NT} [reg|wert]
───────────────────────────────────────────────────────────────────
Führt den angegebenen Interrupt mit den angezeigten Register-
Werten aus. Der Wert des Operanden muß zwischen 01h und FFh
liegen. Die Angabe einer Speicheradresse ist nicht möglich.
Beachtet werden muß hierbei, daß DOS immer noch davon ausgeht,
im unterbrochenen Prozess zu sein, da die PSP-Adresse, die DTA-
Adresse und ähnliches nicht umgesetzt werden.
Der Interrupt 0h kann nur über den Befehl
B CD,00
aufgerufen werden.
Die Funktionen 4Ch (Beende Prozess), 00h (Beende Programm) und
31h (Beende Prozess, aber behalte ihn im Speicher) des Interrupt
21h, der Interrupt 20h (Beende Programm), die Interrupts 22h,
23h, 24h und der Interrupt 27h (Beende Programm mit einge-
schränkter Speicherfreigabe) sollten auf keinen Fall ausgeführt
werden. In diesem Fall würde das AKTIV-Flag immer noch auf
'Aktiv' stehen und somit kein Neuaufruf von MDEBUG mehr möglich
sein.
Dieser Mißstand kann allerdings durch den erneuten Aufruf von
MDEBUG mit dem Parameter 'SET' bzw. über den Aufruf der Funktion
05h des User-Ints geändert werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 56
B b1{{,}b2..{,}bn}
───────────────────────────────────────────────────────────────────
Führt die angegebenen Maschinencodes mit den aktuellen Register-
Werten aus. b1..bn müssen hexadezimale Werte zwischen 0 und 0FFh
sein. (Register, Konstante und alle anderen Schreibweisen von
Werten sind nicht erlaubt)
Leerzeichen zwischen den Bytes sind nicht erlaubt (ein Leer-
zeichen wird als Ende der Operanden gewertet!), als Trenner
zwischen den Bytes darf ein Komma gesetzt werden; jedes Byte
muß mit ZWEI hexadezimalen Zeichen angegeben werden - evtl.
mit einer führenden Null.
Die Maschinencodes werden in der angegebenen Reihenfolge byte-
weise in das Codesegment von MDEBUG eingepatcht und, falls bei
der Ermittlung der Maschinen-Codes kein Fehler auftrat, in EINEM
Durchgang ausgeführt. Der Befehl kann nicht abgebrochen werden.
Bei Ausführen eines Interrupts (über 'B CD,nn') sind die Ein-
schränkungen wie beim I-Befehl zu beachten. Maximal können in
einen Befehl 32 Byte Maschinencode eingegeben werden. Nach der
Ausführung des B-Befehls wird die Anzeige des Monitors automa-
tisch aktualisiert.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 57
G{O} [reg|wert]
───────────────────────────────────────────────────────────────────
Ausführen von Maschinen-Code.
Der Wert des Operanden ist die explizite Länge des Maschinen-
Codes in Byte. Das Maximum für die Länge des Maschinen-Codes
ergibt sich aus der Formel
(Monitor-Offset + Maschinencode-Länge + 5) <= 0FFFFh
da der gesamte auszuführende Code in einem Segment liegen muß.
(5 = Länge eines FAR-JMPs) Der auszuführende Maschinen-Code muß
bei der Monitor-Start-Adresse beginnen.Der Maschinen-Code sollte
im RAM sein, überprüft wird nur, ob der Rücksprung eingepatcht
werden kann. MDEBUG arbeitet beim G-Befehl nur mit Sprungan-
weisungen, d.h. die 'normalen' Debugger-Interrupts für diese
Aufgabe werden nicht verwendet. Vor dem G-Befehl werden alle
Register mit den angezeigten Werten geladen, nach der Ausführung
werden die geänderten Registerwerte angezeigt und der angezeigte
Speicherausschnitt im Monitor wird aktualisiert.
Der Befehl ist nur mit äußerster Vorsicht zu benutzen. Der G-
Befehl kann über die BREAK-Taste abgebrochen werden. Da der
Abbruch aber einen STACK-Frame kostet, gilt hier das gleiche
wie für den Prozess-Abbruch durch <CTRL-F10>. Vor der Ausführ-
ung eines G-Befehls sollte das Interrupt-Flag gesetzt sein.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 58
/ hilfreg
───────────────────────────────────────────────────────────────────
Speichern der Monitor-Start-Adresse in zwei Hilfsregistern wobei
der Offset des Monitors im Register hilfreg und das Segment des
Monitors im folgenden Hilfsregister gespeichert wird.
\ hilfreg
───────────────────────────────────────────────────────────────────
Restaurieren der Monitor-Start-Adresse aus zwei Hilfsregistern
wobei der Offset aus dem Register hilfreg und das Segment aus
dem folgenden Hilfsregister restauriert wird.
# hilfreg
───────────────────────────────────────────────────────────────────
Vertauschen der Monitor-Start-Adresse mit zwei Hilfsregistern
wobei der Offset mit dem Wert des Register hilfreg und das Seg-
ment mit dem Wert des folgenden Hilfsregisters getauscht werden.
W{AIT}
───────────────────────────────────────────────────────────────────
Aktualisieren der Registerwerte und des Monitors und warten auf
einen Tastendruck bevor die Ausführung der Befehlszeile fortge-
setzt wird. Auf dem oberen Rand des Fenster wird eine blinkende
Wartemeldung angezeigt. Die eingegebene Taste wird folgender-
maßen interpretiert:
<ESC> - Abbruch der Ausführung
<Backspace> - Bearbeitung der Befehlszeile ab dem Anfang
andere Tasten - Bearbeitung der Befehlszeile fortsetzen
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 59
H{OME} {[reg|wert]}
───────────────────────────────────────────────────────────────────
Nochmalige Ausführung der Befehlszeile ab dem ersten Zeichen.
Vor der Fortsetzung der Bearbeitung der Befehlszeile werden der
Monitor-Inhalt und die angezeigten Registerwerte aktualisiert.
Der Wert des Operanden ist die Anzahl von Warteschleifen die
vor dem H-Befehl ausgeführt werden sollen. (Voreinstellung: 0)
Der H-Befehl sollte nur in Verbindung mit dem W-oder ¿-Befehl
verwendet werden, da sonst eine Endlos-Schleife programmiert
wird. Geschieht dies doch einmal, kann diese über die BREAK-
Taste abgebrochen werden.
Beispiel für den H-Befehl:
MOV AH,0 ^ I 16 ^ ¿ (AL ¬ #27) ^ H
Die Schleife wird durch Eingabe von <ESC> beendet.
ADD SE,4 ^ H 2
Die Schleife muß mit der BREAK-Taste abgebrochen werden.
Der Befehlsname darf nicht mit einem 'N' enden.
H{...}N {[reg|wert]}
───────────────────────────────────────────────────────────────────
Der HN-Befehl arbeitet äquivalent zum H-Befehl.
Der einzige Unterschied ist, daß beim HN-Befehl der Inhalt des
Monitors vor der Ausführung des Befehls nicht upgedatet wird.
Der Update des Monitors geschieht hier nur nach dem Beenden des
Befehls bzw. nach dem Abbruch der Schleife. Der HN-Befehl ist
deshalb entsprechend schneller als der H-Befehl. Da aber nur die
im Interpreter angezeigten Register-Werte vor dem HN-Befehl
jeweils aktualisiert werden, sollte möglichst zur optischen
Kontrolle immer eines dieser Register z.B. als Zähler verändert
werden. Der Befehlsname muß mit einem 'N' enden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 60
¿ [reg|wert]
───────────────────────────────────────────────────────────────────
Bearbeitung der Befehlszeile fortsetzen, falls der Wert des
Operanden ungleich 0 ist, ansonsten die Bearbeitung abbrechen.
Das Zeichen '¿' liegt auf der Taste <ß>.
Der Befehlsname darf nicht mit einem 'H' enden.
Mit Hilfe des ¿-Befehls können auch kleine Schleifen mit beding-
ter Ausführung programmiert werden.
Beispiel:
Füllen des Speicherbereichs bei DS:BX mit den ASCII-Codes von 0
bis 255 (256 Byte):
Vorbereitung: M AL,0
Ausführung: M DS:[BX+AL],AL ^+ AL ^¿ AL ^H
Bemerkung:
Der H-Befehl wird nur ausgeführt, falls AL ungleich 0 ist. Da
aber der Befehl '+ AL' das Register AL auf 0 setzt sobald AL
gleich 255 ist, wird dadurch also die Ausführung beendet.
Falls der Inhalt einer Speicherstelle geprüft werden soll, muß
dieser zuerst in ein Register gebracht werden.
Beispiel:
Incrementieren von AX bis die Taste <CTRL> gedrückt wird:
Ausführung: + AX ^ M BL,040:017 ^¿ ((BL & 04) ! 04) ^H
oder
+ AX ^M BL,040:017 ^¿ (BL % 2)¬1 ^H
Bemerkung:
Hier wird vor dem ¿-Befehl erst der Inhalt der Speicherstelle
040h:017h in das Register BL geladen, damit dann im ¿-Befehl das
Bit 2 dieser geprüft werden kann.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 61
¿H [reg|wert]
───────────────────────────────────────────────────────────────────
Bearbeitung der Befehlszeile fortsetzen, falls der Wert des Ope-
randen ungleich Null ist, ansonsten die Befehlszeile noch einmal
von vorne bearbeiten. Das Zeichen '¿' liegt auf der Taste <ß>.
Der Befehlsname muß mit einem 'H' enden.
F {n}
───────────────────────────────────────────────────────────────────
Verändern des unteren Windows des Monitors.
Der Befehl arbeitet äquivalent zur Taste <F8> im Monitor, die
Werte der Register FS und FO werden aber nicht verändert. n ist
die Anzahl der Zeilen für das untere Window des Monitors.
(1 <= n <= 6), fehlt n wird das untere Window geschlossen)
FX
───────────────────────────────────────────────────────────────────
Vertauschen der Adressen der Monitor-Windows.
@ {...}
───────────────────────────────────────────────────────────────────
Kommentarbefehl, d.h. die Parameter werden ignoriert.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 62
Q{UIT}
───────────────────────────────────────────────────────────────────
MDEBUG verlassen, Wirkung wie die Taste <F10>
Der Befehlsname darf nicht mit einem 'R' oder 'L' enden.
Q{UIT}R
───────────────────────────────────────────────────────────────────
MDEBUG verlassen mit automatischen Neuaufruf von MDEBUG falls
DOS nicht aktiv ist. Wirkung wie die Taste <ALT-F5>.
Der Befehlsname muß mit einem 'R' enden.
Q{UIT}L
───────────────────────────────────────────────────────────────────
Wird MDEBUG über diesen Befehl verlassen, so beendet es den
Aufruf und sperrt die Tastatur. Der unterbrochene Prozeß läuft
danach ganz normal weiter - allerdings führt jeder Versuch, eine
Taste über die Tastatur einzugeben dazu, daß MDEBUG zuerst das
Passwort abfrägt. Erst nach der korrekten Eingabe des Passwortes
gibt MDEBUG die Tastatur wieder frei. Die Sperrung wird auch
wieder aufgehoben durch den Aufruf von MDEBUG über die Funktion
3 bzw. 4 des User-Ints oder einen Aufruf von MDEBUG über einen
zusätzlichen Interrupt.
Der Befehl dient vor allem dazu, den PC für kurze Zeit für Ein-
gaben zu sperren ohne eine evtl. Programmausführung zu unter-
brechen.
Der Befehl 'QL' funktioniert nur, falls ein aktives Passwort für
MDEBUG installiert ist. Da MDEBUG bei der Abfrage des Passwortes
den Bildschirmmodus in diesem Fall nicht berücksichtigt, kann es
vorkommen, daß das Passwort blind eingegeben werden muß. Während
der Sperrung ist auch die Tastenkombination <CTRL-ALT-DEL>
gesperrt. Auch hier stehen für die Eingabe des Passwortes max.
10 Sekunden zur Verfügung.
Der Befehlsname muß mit einem 'L' enden.
Hinweis: Maus-Eingaben werden nicht unterbunden und TSRs können
teilweise noch über ihren Hotkey aufgerufen werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 63
SH [suchmaske] {,}{...}
───────────────────────────────────────────────────────────────────
Der Befehl SH dient zum Suchen einer Bytefolge im Speicher.
Gesucht wird ab dem zweiten im ersten Window des Monitors ange-
zeigten Byte bis zum Ende des ersten Megabytes des Speichers.
Falls die Bytefolge gefunden wird, wird die Monitor-Start-
Adresse mit der Adresse der Bytefolge geladen.
Die gefundene Adresse wird folgendermaßen konvertiert:
Falls die Adresse VOR dem ersten MCB oder HINTER dem letzten MCB
liegt, wird sie in die Form 'nn00:nnnn' konvertiert. (mit
n <= 0 <= F) und das Register AX wird auf 0 gesetzt.
Liegt die Adresse in den ersten 65.535 Byte eines Speicherblocks
der über die MCB-Kette verwaltet wird, so wird sie in die Form
'seg:nnnn' konvertiert, wobei seg das Segment des Speicherblocks
in dem die Adresse liegt ist. Sollte diese Form für die Adresse
nicht möglich sein, so wird sie in die Form 'nn00:nnnn' konver-
tiert. Im Register AX steht in beiden Fällen das Segment des
MCBs des Speicherblocks in dem die Adresse liegt.
Hinweis:
Falls die zu suchende Bytefolge nicht mindestens ein direkt an-
gegebenes Byte (also OHNE Joker, Prefixe und Intervalle) ent-
hält, kann die Suche auf langsameren Rechnern mehrere Minuten
dauern. (Normalerweise dauert die Suche ca. 1 - 40 Sekunden, je
nach der Häufigkeit des ersten direkt angegebenen Bytes im
Speicher und nach der Anzahl der Joker, Prefixe und Intervalle.)
Zur Beschleunigung der Suche sollte daher immer mindestens ein
Byte des Suchstrings OHNE Prefixe, Joker und Intervalle ange-
geben werden.
Die Suche kann über die BREAK-Taste abgebrochen werden.
Aufbau von suchmaske:
{string}{,}{¬}{bytemaske}{,}{|{¬}bytemaske}{...}
Aufbau von string
string ist eine in Hochkommata oder Gänsefüßchen angegebene Zei-
chenkette.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 64
Aufbau von bytemaske
bytewert-bytewert ->> Byte muß im Intervall liegen
bytewert ->> Byte muß übereinstimmen
n? ->> nur oberes Nibble wird geprüft
?n ->> nur unteres Nibble wird geprüft
?? ->> Byte wird ignoriert
Aufbau von bytewert:
nn ->> Hexadezimaler Wert, es sind
mindestens und höchstens zwei
Ziffern pro Byte nötig.
'x' ->> ASCII-Zeichen
mit:
n = Hexziffer (0..9, A..F, a..f)
? = Joker, d.h. der Wert des Nibbles ist egal
¬ = NOT-Prefix, d.h. das Byte darf der Bytemaske nicht
entsprechen
| = ODER-Prefix, d.h. die mit | verketteten Bytemasken
gelten alle für ein Byte. Falls eine der Bytemasken
stimmt, ist das Byte okay.
x = ASCII-Zeichen, das Zeichen '■' ist hier kein Joker!
Beispiele für Suchmasken:
40
->> ist wahr, falls das Byte den Wert 40h hat
4?
->> ist wahr, falls das obere Nibble des Bytes 4 ist
(z.B. 41h, 42h oder 4Fh)
?5
->> ist wahr, falls das untere Nibble des Bytes 5 ist
(z.B. 45h oder F5h)
??
->> ist immer wahr (d.h. das Byte wird ignoriert)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 65
¬45
->> ist wahr, falls das Byte NICHT den Wert 45h hat
¬4?
->> ist wahr, falls das obere Nibble des Bytes NICHT 4 ist
¬??
->> sinnlos, Fehler!
'A'
->> ist wahr, falls das Byte den Wert 'A' (= 40h) hat
'A'-'Z'
->> ist wahr, falls das Byte im Intervall 40h (= 'A') und
5Ah (= 'Z') inclusive liegt.
¬'0'-'9'
->> ist wahr, falls das Byte NICHT im Intervall 30h (= '0')
und 39h (= '9') liegt.
'A'-'F'|'a'-'f'|'0'-'9'
->> ist wahr falls das Byte im Intervall 'A' bis 'F' ODER im
Intervall 'a' bis 'f' ODER im Intervall '0' bis '9' liegt.
Beispiele für Suchstrings:
SH 40,41,42
->> Sucht die Bytefolge für die gilt: Das erste Byte ist 40h,
das zweite Byte ist 41h und das dritte Byte ist 42h.
SH 40-5?
->> Sinnlos, Fehler!
(möglich ist: SH 40-5F)
SH 40-??
->> Sinnlos, Fehler!
(möglich ist: SH 40-FF)
SH 34-20
->> Fehler, die untere Grenze muß kleiner als die obere
Grenze sein! Die Maske kann ersetzt werden durch SH ¬21-33
SH 'TMP=',¬00
->> Sucht die Bytefolge mit dem Inhalt 'TMP=' hinter der ein
Byte ungleich 0 folgen muß
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 66
SH 'A'-'Z','0'-'9','0'-'9'
->> Sucht die Bytefolge für die gilt:
Das erste Byte ist ein Zeichen zwischen 'A' und 'Z' (incl.)
und die folgenden beiden Bytes sind jeweils Ziffern im
Intervall zwischen '0' und '9'
SH 00,00,30|40|50
->> Sucht eine Folge von zwei Nullbytes hinter denen ein Byte
mit dem Wert 30h ODER 40h ODER 50h folgen muss.
SH ¬00-7F|40,45
->> Sucht die Bytefolge für die gilt:
Das erste Byte ist nicht im Intervall 00h bis 7Fh ODER 40h
und das folgende Byte ist 45h
SH 00,F0,'11/09/87','a'-'z'
->> Sucht die Bytefolge für die gilt:
Das erste Byte ist 00h, das zweite Byte ist F0h, darauf folgt
der String '11/09/87' gefolgt von einem Zeichen im Intervall
'a' bis 'z'.
Aber: Der Suchstring ist nicht optimal gewählt!
Da nämlich das erste direkt angegebene Byte den Wert
00h hat und dieser Wert relativ häufig im Speicher vor-
kommt dauert die Suche unnötig lange!
Sinnvoller wäre:
SH 00|00,F0,'11/09/87','a'-'z'
┌──
│ (!)
└─────────────────────────────┐
Hier dient die Angabe der zweiten Maske für das erste
Byte nur dazu, daß das Byte F0h als erstes direkt ange-
gebenes Byte genommen wird. Da das Byte F0h normaler-
weise seltener als das Byte 00h im Speicher vorkommt,
geht die Suche so bedeutend schneller.
Probieren Sie's aus - möglichst mit einer eindeutigen
Bytefolge im BIOS und der Suche bei 0:0 beginnend.
Getestete Werte auf einen XT mit 8 MHZ:
Start-Adresse der Suche: 0000:0000
Bytefolge gefunden bei: FF00:0FF3
benötigte Zeit für 'SH 00,F0, ...' : 13 sec.
benötigte Zeit für 'SH 00|00,F0, ...' : 2 sec. (!)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 67
SH 'COMSPEC='
->> Sucht die Zeichenfolge 'COMSPEC='
Aber: Da MDEBUG jede mit <RETURN> abgeschlossene Befehlszeile
in einen internen Puffer speichert, wird die Zeichen-
folge in diesem Puffer auf jeden Fall gefunden, falls
die Start-Adresse für die Suche kleiner als CS:0 ist.
(CS = Codesegment von MDEBUG)
Soll dies unterdrückt werden, muß einfach nur ein Byte
des Suchstrings in hexadezimaler Form angegeben werden:
(hier: 43h = ASCII-Code von 'C')
SH 43,'OMPSEC='
oder der Suchstring getrennt werden:
SH 'C','OMSPEC='
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 68
Bedeutung der Parameter
───────────────────────
seg1:
Segment-Prefix (erlaubt: bei reg1, reg2, wert1 und wert2)
In MDEBUG ist für alle Speicheradressen das aktuelle Segment-
Register des oberen Monitor-Windows als Segment der angegebenen
Adresse voreingestellt. Diese Voreinstellung kann aber durch ein
Segment-Prefix überschrieben werden. Das Prefix muß ein Register,
ein expliziter Wert oder ein Ausdruck sein.
Beispiele: MOV BL,AX:[BX] oder MOV BL,AX:BX
MOV AL,40:*[17] oder MOV AL,40:*17
MOV BL,CS-1:[0] oder MOV BL,CS-1:0
reg, reg1, reg2
Name eines Registers, möglich sind folgende Namen:
Prozessor-Register: AX,BX,CX,DX,DI,SI,ES,DS,BP,SP,SS,FL
Die Register AX .. DX können auch byteweise angesprochen werden
(AH, AL .. DH, DL). Mit FL ist das Flag-Register gemeint.
Hilfsregister: R1, R2, R3, R4, R5, R6, R7, R8
Die Hilfsregister können auch unter folgenden Namen angesprochen
werden:
1X,2X,3X,4X,5X,6X,7X,8X
In dieser Schreibweise ist auch ein byteweiser Bezug, wie bei
AX .. DX, möglich.
(z.B.) 1L = Lowbyte von R1 5H = Highbyte von R5
Binär-Register: R0
Das Binär-Register kann wie jedes andere Hilfsregister verwendet
werden. (auch byteweiser Bezug über '0L' bzw. '0H') Der einzige
Unterschied ist die binäre Anzeige des Registerwertes.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 69
Sonder-Register: SE, OF
Unter diesen beiden Bezeichnern können die voreingestellten Regis-
ter des Monitors für das obere Window als normale Register ange-
sprochen werden (nur als Wort-Register).
Versteckte Register: FS, FO
Unter diesen beiden Bezeichnern können die Register, in denen die
Adresse für das untere Window des Monitors gespeichert ist, ange-
sprochen werden. (nur als Wort-Register)
Der Inhalt dieser Register wird nur angezeigt, falls das untere
Window des Monitors eingeschaltet ist.
Pseudo-Register
Falls als zu verändernder Operand eines Befehls weder ein Regis-
ter noch eine Speicherstelle angegeben wird, wird das Ergebnis im
ersten Pseudo-Register gespeichert.
Falls der zweite Operand ein expliziter Wert, eine Konstante oder
ein Ausdruck ist, wird dieser für die Berechnung im zweiten Pseudo-
Register zwischengespeichert.
Das erste Pseudo-Register kann z.B. dazu benutzt werden, den Inhalt
des Flag-Registers nach einem Befehl zu ermitteln ohne einen Ope-
randen zu verändern. Falls der Inhalt der Pseudo-Register weiter
verwendet werden soll, kann er über die Konstanten P1 (Pseudo-
Register für den ersten Operanden) und P2 (Pseudo-Register für den
zweiten Operanden) angesprochen werden.
Beispiel:
Simulation des Befehls 'CMP AX,BX':
SUB AX-0,BX
────
Ausdruck als zu verändernder Operand, es wird also das
Pseudo-Register für das Ergebnis benutzt und nur das Flag-
Register verändert.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 70
hilfreg
Name eines Hilfsregisters, wobei das Register R8 und Adressen-
angaben nicht erlaubt sind. Es kann nur ein Wortregister angegeben
werden.
wert
Explizit angegebener Wert. Explizite Werte können in fünf verschie-
denen Formaten angegeben werden.
Sind führende Hochkommata oder Gänsefüßchen vorhanden, wird der
Wert als String behandelt. Strings können max. 2 Zeichen lang sein;
die Eingabe von Steuerzeichen ist nur nach dem Prefix-Zeichen
<CTRL-P> möglich. Das Verkettungs-Zeichen '^' kann auf keinem Fall
in einem String vorkommen.
Der String muß mit dem einleitenden Zeichen (Hochkommata oder
Gänsefüßchen) abgeschlossen sein. Zur Eingabe von Hochkommata (bzw.
Gänsefüßchen) muß als String-Begrenzer das Gänsefüßchen (bzw. das
Hochkommata) genommen werden. Gänsefüßchen und Hochkommata in einem
String sind nicht möglich.
Ist kein führendes Gänsefüßchen oder Hochkommata vorhanden wird der
Wert als Zahl interpretiert. Fehlt ein Formatkennzeichen für die
Zahl, wird diese als Hexadezimalwert interpretiert. Maximum für
eine hexadezimalen Wert ist 0FFFFh. Negative Werte können durch
ein führendes Minuszeichen '-' gekennzeichnet werden. Zwischen
dem Minuszeichen und dem Wert darf kein Leerzeichen stehen.
Zahlen im dezimalen Format können direkt eingegben werden, indem
vor dem Wert das Formatkennzeichen '#' eingegeben wird; für Zahlen
im binärem Format muß vor dem Wert ein '$' angegeben werden.
Zahlen mit einer Basis zwischen 2 und 15 können auch in der Form
b#n{...}
angegeben werden, wobei b die Basis für die Zahl ist und n{...} die
Zahl selbst (mit 2 <= b <= F und 0 <= n < b).
Vorzeichen müssen jeweils direkt vor dem Formatkennzeichen stehen.
Bei negativen Werten wird das Zweierkomplement gebildet und bei
Byte-Werten wird nur der angegebene Wert modulo 256 übernommen.
Zur Formatierung von Zahlen kann in allen Formaten das Zeichen '.'
verwendet werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 71
Beispiele:
MOV AX,#12 -> AX = 000C = 12 (dez)
MOV BX,-#12 -> AX = FFF4 = -12 (dez)
MOV AL,+#34 -> AL = 22 = 34 (dez)
MOV CL,#1.234 -> CL = D2 = 210 (dez)
= (1234 MOD 256)
MOV CL,-#1.234 -> CL = 2E = 46 (dez)
-1234 = FB2Eh, FB2Eh MOD 100h = 2Eh
MOV AX,$11.1100 -> AX = 003C
MOV BL,-$01 -> BL = FF
MOV AX,5#100 -> AX = 19 = 25 (dez)
= 100 zur Basis 5
MOV BX,F#101 -> BX = E2 = 226 (dez)
= 101 zur Basis 15
MOV CX, -3#121 -> CX = FFF0 = - 16 (dez)
= -121 zur Basis 3
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 72
Konstanten
──────────
Überall wo die Angabe eines expliziten Wertes erlaubt ist, kann
auch eine Konstante angegeben werden.
Ausnahme:
Bei den B- und SH-Befehlen ist eine Konstante nicht erlaubt.
Folgende Konstanten sind definiert:
■ CS
Segment-Adresse des geladenen MDEBUGs
CS wird beim Installieren von MDEBUG gesetzt und verändert sich
danach nicht mehr.
■ RS
Segment der Rücksprung-Adresse
■ RO
Offset der Rücksprung-Adresse
Die Konstanten RS und RO werden bei jedem Aufruf von MDEBUG über
den Hotkey, dem User-Int, dem automatischen Aufruf oder über einen
zusätzlichen Interrupt neu ermittelt.
■ P1
Inhalt des Pseudoregisters für den ersten Operanden
■ P2
Inhalt des Pseudoregisters für den zweiten Operanden
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 73
■ P3
Die Konstante P3 enthält den Offset der Variablen 'MDebugColors'
von MDEBUG (Format: Wort, Aufbau: Highbyte: Farbe des Monitors,
Lowbyte: Farbe des Interpreters). Durch Ändern dieser Variable
können während eines Aufrufes von MDEBUG die Farben des Monitors
und des Interpreters verändert werden.
('MOV CS:*[P3],nn' ->> Farbe des Interpreters ändern,
'MOV CS:*[P3+1],nn' ->> Farbe des Monitors ändern)
Nach einer Änderung der Farben müssen die Fenster von MDEBUG über
die Taste <ALT-F9> neu aufgebaut werden, damit die Änderungen wirk-
sam werden.
■ P4
Die Konstante P4 enthält den Offset der Variablen 'MDebugCursor'
von MDEBUG. Diese Variable enthält das Attribut für den Cursor von
MDEBUG (Word, Lowbyte = Attribut für den Overwrite-Modus, Highbyte
= Attribut für den Insert-Modus). Diese Variable kann jederzeit
geändert werden (z.B. durch 'MOV CS:P4,9ECE').
Beachtet werden sollte, daß MDEBUG zur Unterscheidung des Insert-
und Overwrite-Modus im Interpreter und zur Anzeige, ob der Monitor
blockiert oder frei ist das Bit 7 des Cursorfarbattributes um-
schaltet.
■ P5
Die Konstante P5 enthält den Offset der Variablen 'DontHide' von
MDEBUG (Byte). Falls der Inhalt dieser Variablen ungleich 0 ist,
wird der Bildschirm vor dem Beenden des aktuellen Popup-Aufrufs von
MDEBUG NICHT restauriert. Die Variable wird bei jeden Popup-Aufruf
wieder auf 0 gesetzt.
■ DO
Die Konstante DO enthält den Wert des DOS-Busyflags verODERt mit
den Wert des Critical-Error-Flags. Nicht wiedereintrittsfähige
Funktionen des DOS-Interrupts 21h sollten nur ausgeführt werden,
falls der Wert der Konstanten DO Null ist.
■ CU
Diese Konstante enthält den Offset des Bytes, auf dem im Monitor
der Cursor steht (oder 0, falls der Interpreter aus dem Segment-
oder Offset-Feld des Monitors aufgerufen wurde).
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 74
Ausdruck
────────
Überall wo die Angabe eines expliziten Wertes erlaubt ist, kann
auch ein Ausdruck angegeben werden. (ausgenommen beim B- und beim
SH-Befehl)
Ein Ausdruck besteht aus mindestens einem Teil-Ausdruck. Ein Teil-
Ausdruck ist eine arithmetische oder logische Operation mit zwei
Operanden die Werte, Register, Konstante oder Teil-Ausdrücke sein
können bzw. ein Operand mit mindestens einer Klammer-Ebene.
Explizite Werte können in allen vier Schreibweisen (hexadezimal,
dezimal, binär oder als String) angegeben werden, negative Werte
können ebenfalls verwendet werden. Es können alle Register und
Konstanten verwendet werden. In einem Teil-Ausdruck können keine
Speicherstellen verwendet werden.
Verändert wird nur der erste Operand eines Teil-Ausdrucks.
Implementiert sind folgende Operatoren:
┌─────────────────────────────────────────────────────────────────┐
│ Arithmetische Operatoren │
├──────┬────────────────┬─────────────────────────────────────────┤
│ Op. │ Funktion │ Kommentar │
╞══════╪════════════════╪═════════════════════════════════════════╡
│ + │ Addition │ keine Berücksichtigung eines Übertrages │
│ - │ Subtraktion │ keine Berücksichtigung eines Übertrages │
│ / │ Division │ nur ganzzahlig │
│ │ │ Eine Division durch 0 ist nicht möglich.│
│ \ │ Modulo │ ganzzahiger Rest einer Division │
│ │ │ Eine Division durch 0 ist nicht möglich.│
│ * │ Multiplikation │ keine Berücksichtigung eines Übertrages │
└──────┴────────────────┴─────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 75
┌─────────────────────────────────────────────────────────────────┐
│ Logische Operatoren │
├──────┬────────────────┬─────────────────────────────────────────┤
│ Op. │ Funktion │ Kommentar │
╞══════╪════════════════╪═════════════════════════════════════════╡
│ & │ AND │ Verknüpfen der Operanden mit AND │
│ | │ OR │ Verknüpfen der Operanden mit OR │
│ ! │ XOR │ -"- mit einem exklusiven OR │
│ » │ Shift rechts │ Verschieben des ersten Operanden um n │
│ │ │ Bits nach rechts (n ist der 2. Operand) │
│ │ │ Werte größer als 15 für den zweiten │
│ │ │ Operanden führen immer zum Ergebnis 0 │
│ « │ Shift links │ Verschieben des ersten Operanden um n │
│ │ │ Bits nach links (n ist der 2. Operand) │
│ │ │ Werte größer als 15 für den zweiten │
│ │ │ Operanden führen immer zum Ergebnis 0 │
│ % │ Ermittelt den │ Die Bits des Operanden sind dabei von │
│ │ Wert eines │ rechts nach links mit 0 bis 15 durch- │
│ │ bestimmten │ nummeriert. Werte größer als 15 für │
│ │ Bits des ersten│ den zweiten Operanden führen immer zum │
│ │ Operanden │ Ergebnis 0 │
└──────┴────────────────┴─────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ Vergleichsoperatoren (ohne Berücksichtigung eines Vorzeichens) │
├──────┬──────────────────────────────────────────────────────────┤
│ Op. │ Funktion │
╞══════╪══════════════════════════════════════════════════════════╡
│ < │ Falls der erste Operand kleiner als der zweite Operand │
│ │ ist, ist das Ergebnis 1, ansonsten ist das Ergebnis 0 │
├──────┼──────────────────────────────────────────────────────────┤
│ > │ Falls der erste Operand größer als der zweite Operand │
│ │ ist, ist das Ergebnis 1, ansonsten ist das Ergebnis 0 │
├──────┼──────────────────────────────────────────────────────────┤
│ = │ Falls der erste Operand gleich dem zweiten Operanden │
│ │ ist, ist das Ergebnis 1, ansonsten ist das Ergebnis 0 │
├──────┼──────────────────────────────────────────────────────────┤
│ ¬ │ Falls der erste Operand ungleich dem zweiten Operanden │
│ │ ist, ist das Ergebnis 1, ansonsten ist das Ergebnis 0 │
│ │ Das Zeichen '¬' liegt im Interpreter auf der Taste <_> │
└──────┴──────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 76
Ein Operationszeichen muß immer zwischen den Operanden stehen.
Falls der erste Operand fehlt, wird als erster Operand 0 genommen,
der zweite Operand muß auf jeden Fall angegeben sein.
Wird zwischen zwei Teil-Ausdrücken kein Operations-Zeichen ange-
geben, werden die Werte der Teil-Ausdrücke addiert. Jeder Teil-
Ausdruck wird von links nach rechts ohne Berücksichtigung von
Operator-Präferenzen (z.B. 'Punkt vor Strich') berechnet. Eine
Klammerung zur Änderung der Berechnungs-Reihenfolge ist möglich.
Maximal sind 5 Klammer-Ebenen erlaubt.
Beispiele für Teil-Ausdrücke:
sei AX = 0102h, BX = 0304h und CX = FFF8h
┌────────────────────────┬────────┬──────────────────────────────┐
│ Teil-Ausdruck │ Wert │ Kommentar │
╞════════════════════════╪════════╪══════════════════════════════╡
│ 3+4 │ 7h │ │
│ 3+2*2 │ 0Ah │ kein 'Punkt vor Strich' │
│ 3+(2*2) │ 7h │ Klammer-Ebene berücksichtigt │
│ #35\(4*(2+2)) │ 3h │ Klammer-Ebenen -"- │
│ () │ 0h │ leere Klammer-Ebene │
│ (()) │ 0h │ leere Klammer-Ebenen │
│ (4) │ 4h │ voreingestellt ist 0 als 1. │
│ │ │ Operand und die Addition als │
│ │ │ Operation │
│ 4--5 │ 9h │ das zweite Minus ist ein │
│ │ │ Vorzeichen │
│ AL*(-BL) │ FFF8h │ -8 dez. │
│ AL*-04 │ FFF8h │ Minus ist Vorzeichen │
│ AL*AX │ 204h │ +516 dez. │
│ (4)(5) │ 9h │ Addition ist Voreinstellung │
│ (ALBL) │ 6h │ Addition ist Voreinstellung │
│ (AL BL) │ 6h │ Addition ist Voreinstellung │
│ (AX203) │ 0305h │ Addition ist Voreinstellung │
│ (AL234) │ 236h │ Addition ist Voreinstellung │
│ (234AL) │ Fehler│ Das 'A' wird als weitere │
│ │ │ Hex-Ziffer interpretiert. │
│ (1234SI) │ Fehler│ Das 'S' wird als weitere │
│ │ │ Hex-Ziffer interpretiert. │
│ $1+#1234+0A+'A'-41 │ 04DDh │ 1245 dez, die Zahlenformate │
│ │ │ können gemischt werden │
│ CS-1 │ │ Segment des MCBs von MDEBUG │
│ -AX-1 │ FEFDh │ Einerkomplement von AX │
│ (AX ! 0FFFF) │ FEFDh │ Einerkomplement von AX │
│ (AX+F)/10 │ 11h │ Umrechnung eines Wertes auf │
│ │ │ nächste Paragraphen-Grenze │
└────────────────────────┴────────┴──────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 77
┌────────────────────────┬────────┬──────────────────────────────┐
│ Teil-Ausdruck │ Wert │ Kommentar │
╞════════════════════════╪════════╪══════════════════════════════╡
│ BX*AX │ 0A08h │ Übertrag wird nicht berück- │
│ │ │ sichtigt. │
│ AX/(AX-0102) │ Fehler│ durch 0 kann nicht geteilt │
│ │ │ werden │
│ ((BL % 7)*-1 « 8)|BL │ 4h │ liefert den vorzeichengerecht│
│ oder │ │ auf Wortgröße erweiterten │
│ -(BL % 7)«8|BL │ │ Wert von BL │
│ ( (BL » 3) & 1) │ 0h │ Ergebnis: 3. Bit von BL │
│ (BL % 2) │ 1h │ 2. Bit von BL │
│ AX-(AX / 4 * 4) │ 2h │ Simulation des MOD-Operators │
│ -2*(CX » 0F)*CX+CX │ 8h │ liefert immer d. Absolutwert │
│ │ │ d. benutzten Registers (hier │
│ │ │ CX), da der Teil-Ausdruck │
│ │ │ -2*(CX » 0F)*CX für negative │
│ │ │ Werte 0 wird │
│ ¬AX │ 1h │ als erster Operand wird hier │
│ │ │ implizit 0 angenommen │
│ ¬(CX+8) │ 0h │ als erster Operand wird hier │
│ │ │ implizit 0 angenommen │
│ /AX │ 0h │ als erster Operand wird hier │
│ │ │ implizit 0 angenommen │
└────────────────────────┴────────┴──────────────────────────────┘
Die Berechnung eines Ausdruckes erfolgt immer im Wort-Format; d.h.
alle Operanden werden vor jeder Berechnung in das Wort-Format
konvertiert. Eine eventuelle Konvertierung des Ergebnisses ins
Byte-Format erfolgt erst nach der vollständigen Berechnung eines
Ausdrucks. Die Berechnung eines Ausdrucks geschieht vollständig
intern, d.h. es werden hierbei keine Register oder Speicherstellen
verändert.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 78
Byte-Operanden werden vor der Berechnung in Wortwerte umgewandelt.
Beispiel:
sei BX = 00FFh und AX = 0001h und CX = 0103h
dann wird (intern) aus
-BL -> FF01 ; der Wert 00FFh wird negiert
BL -> 00FF ; keine Übernahme des 7. Bits ins High-Byte
-AL -> FFFF ; Negiert wird intern der Wert als Wort
-CL -> FFFD ; der Wert 03h (als Wort) wird negiert
CL -> 0003
Die Anzahl der Teil-Ausdrücke eines Ausdrucks ist nicht begrenzt.
Die einzelnen Komponenten eines Teil-Ausdrucks können durch Leer-
zeichen getrennt sein falls aus dem Teil vor dem Leerzeichen
erkennbar ist, daß der Teil-Ausdruck noch nicht beendet ist.
Beispiele:
MOV AX,BX + 4
Leerzeichen erlaubt, ABER: Da der Teil vor dem Leerzeichen ein
korrekter Operand ist und mit einem Leerzeichen abschließt,
wird der Teil ' + 4' als Kommentar erkannt und nicht berück-
sichtigt!
MOV AX,(BX + 4)
Korrekt, da eine Klammer noch nicht geschlossen
MOV AX,BX+ 5
Korrekt, da ein Operand noch nicht bearbeitet ist
MOV AX,[BX + 5]
Leerzeichen erlaubt, ABER: Da der Teil vor dem Leerzeichen ein
korrekter Operand ist, mit einem Leerzeichen abschließt und
das Zeichen '[' nicht klammert, wird der Teil ' + 5]' als Kom-
mentar erkannt und nicht berücksichtigt!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 79
MOV AX,[BX+4 +3]
Korrekt, aber der Teil '+3]' wird als Kommentar gewertet und
nicht berücksichtigt!
MOV AX,[(BX +4 +3)]
Korrekt, da eine Klammer noch nicht geschlossen ist.
Hinweis:
Falls Leerzeichen zur Erhöhung der Lesbarkeit eines Ausdrucks be-
nutzt werden sollen, sollte der gesamte Ausdruck geklammert werden.
Falls als erster zu verändernder Operand eines Befehls ein Ausdruck
angegeben wird, wird das Pseudo-Register benutzt.
Besonderheiten:
MOV AX,*4
Das Zeichen '*' wird als Kennzeichen für ein Speicher-Byte
betrachtet, ausgeführt wird also:
MOV AX,MonitorSeg:*[0004]
MOV AX,**4
Der Befehl wird ausgeführt als:
MOV AX,MonitorSeg:*[(0*4)]
MOV +AX,5
Der Befehl wird ausgeführt als:
MOV 0+AX,5
d.h. es wird das Pseudo-Register und nicht AX verändert!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 80
Adressierung von Speicherstellen
────────────────────────────────
Wird ein Register-Bezeichner, ein expliziter Wert oder ein Aus-
druck in eckigen Klammern ('[]') gesetzt, so wird das Wort mit der
aktuellen Segment-Adresse des oberen Monitor-Windows als Segment
und dem Inhalt des Registers bzw. den expliziten Wert oder dem
Wert des Ausdrucks als Offset gelesen bzw. geändert. (INTEL-Format
die schließende eckige Klammer ist optional)
Wird dem Register-Bezeichner bzw. Wert oder Ausdruck ein '*' vor-
angestellt, so ist das Byte, auf das die aktuelle Segment-Adresse
des oberen Monitor-Windows und der Inhalt des Registers bzw. der
explizite Wert oder der Wert des Ausdrucks als Offset zeigt,
gemeint. ('*[' hat die gleiche Wirkung)
Die Einstellung des Segment-Registers des oberen Monitor-Windows
als Segment-Register kann durch ein Segment-Prefix überschrieben
werden. Als Segment-Prefix ist ein Register, ein expliziter Wert
oder ein Ausdruck erlaubt. Das Segment-Prefix muß mit einem ':'
abgeschlossen werden. Falls ein Segment-Prefix angegeben ist, kann
bei Wortgrößen die Angabe der eckigen Klammern '[]' entfallen.
Syntax der Befehle
──────────────────
Für die Bedeutung der Befehle ist nur das erste Zeichen signifi-
kant. Die Befehle können also in der kurzen oder in einer langen
Schreibweise angegeben werden.
Ausnahme:
Bei allen Befehlen, die mit dem gleichen Zeichen beginnen, ist auch
das letzte Zeichen signifikant.
Die Register-Namen und Konstanten müssen in Großbuchstaben ein-
gegeben werden; die signifikanten Buchstaben der Befehle müssen in
der angegebenen Schreibweise eingegeben werden
Die Original-Belegungen der umbelegten Tasten können nur nach dem
Prefix-Zeichen <CTRL-P> eingegeben werden. Kleinbuchstaben können,
falls der Schalter UpcaseMode auf U steht, ebenfalls nur nach dem
Prefixzeichen <CTRL-P> eingegeben werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 81
Zwischen dem Befehl und dem (ersten) Operand muß mindestens ein
Leerzeichen stehen; zwischen den Operanden sollten Kommata oder
Leerzeichen stehen. Der erste und der zweite Operand eines Befehls
können identisch sein.
Pro Eingabe sind mehrere (Interpreter)Befehle möglich. Diese müssen
durch das Verkettungs-Zeichen '^' getrennt sein.
Führende Blanks eines Befehls werden überlesen. Ein Befehl ist zu
Ende, falls alle nötigen Operanden ermittelt sind, ein Verkettungs-
Zeichen auftritt (= Anfang eines neuen Befehls) oder das Ende der
Eingabezeile erreicht wird.
Die Anzahl der Befehle pro Eingabe ist nur durch die max. Länge der
Eingabezeile (66 Zeichen) begrenzt. Die Ausführung einer Befehls-
zeile endet bei Auftritt eines Fehlers, falls ein Kommentaranfang
gefunden wird oder falls alle Befehle der Zeile bearbeitet sind.
Falls kein Fehler auftritt, wird der Eingabepuffer gelöscht. An-
sonsten ertönt ein Fehlersignal und die Befehlszeile bleibt zum
Editieren im Eingabepuffer. Der Cursor steht dann auf der Stelle
im Eingabepuffer an der der Fehler bemerkt wurde. Auf dem oberen
Rand des Interpreter-Fensters wird eine Fehlermeldung angezeigt.
Diese muß mit einer Taste quittiert werden.
Die Anzeige der Registerwerte und der Inhalt des Monitors werden
erst nach dem Ende der Bearbeitung einer Befehlszeile auf den
neuesten Stand gebracht (Ausnahme: W- u. H-Befehl).
Bei verketteten Befehlen muß beachtet werden, daß alle Befehle
von MDEBUG EINZELN sequentiell ausgeführt, d.h. interpretiert wer-
den, wobei nach JEDEM Befehl intern die Registerwerte angepasst
werden!
Eine Befehlszeile ist zu Ende, falls der Eingabepuffer vollständig
bearbeitet wurde oder hinter einem Befehl kein Verkettungszeichen
steht; d.h. hinter dem letzten Befehl stehende Zeichen werden
ignoriert. (= Kommentar-Simulation) Verkettungszeichen in Kommen-
taren werden ignoriert.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 82
Die Kommentar-Simulation kann z.B. zum Vertauschen der Werte zweier
Register genutzt werden:
sei AX = 1024 und BX = 3408
Sollen die Werte der Register vertauscht werden, wird der Wert des
überschriebenen Registers hinter dem ersten MOV-Befehl vermerkt.
Also
MOV AX,BX 1024 MOV AX,BX MOV BX,1024
───────── ──── oder: ───────── ───────────
Befehl Kommentar! Befehl Kommentar!
Zur richtigen Belegung von BX muß nun nur mittels <SHIFT-RETURN>
die Eingabe wieder zum Editieren freigegeben und korrigiert werden.
Der Tausch ist natürlich auch über die Befehls-Verkettung möglich:
Beispiel:
Vertauschen der Inhalte der Register AX und BX unter Zuhilfe-
name des Registers R7.
Eingabe:
MOV R7,AX ^ MOV AX,BX ^ MOV BX,R7 AX <-> BX
───────── ───────── ───────── ─────────
Befehl1 Befehl2 Befehl3 Kommentar!
oder
Vertauschen der Register CX und DX ohne Hilfsregister:
! CX,DX ^ ! DX,CX ^ ! CX,DX CX <-> DX
─────── ─────── ─────── ─────────
Befehl1 Befehl2 Befehl3 Kommentar!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 83
Syntax der Operanden
────────────────────
Führende Nullen sind nur bei den Operanden des B- und SH-Befehls
erforderlich, bei allen anderen Werten sind sie möglich aber nicht
nötig.
Es wird von einer Byte-Operation ausgegangen, falls mindestens
einer der Operanden ein Bytewert ist.
Beispiel:
MOV AL,[BX] -> AL wird geändert
MOV AX,CL -> AL = CL und AH bleibt unverändert
aber
MOV BX,[CL] -> BX wird verändert, '[CL]' bezeichnet
ein Speicherwort
Ein explizit angegebener Wert wird in das Format des anderen
Operanden (Byte oder Wort) konvertiert. Ist kein eindeutiges Kenn-
zeichen für das Format vorhanden, wird eine Wort-Operation aus-
geführt.
Sonstiges
─────────
■ FÜr B-, C- und I-Befehle werden keinerlei Überprüfungen vorge-
nommen. Vor dem G-Befehl wird nur überprüft, ob der auszuführende
Code vollständig im im oberen Monitor-Window angezeigten Segment
liegt und ob das Ende des auszuführenden Codes im RAM liegt.
Vor den B-, G-, C- und I-Befehl wird der Stack zurück auf den
Stack des unterbrochenen Prozesses gesetzt und die Register
werden mit den angezeigten Werten geladen. Nach der Ausführung
des Befehls werden alle Registerwerte gespeichert, der Stack
wieder umgesetzt und die neuen Register-Werte angezeigt. D.h. B-,
G-, C- und I-Befehle werden so ausgeführt, als wenn sie an der
Stelle im unterbrochenen Prozess die nach der Unterbrechung aus-
geführt würden.
Nur der Wert des Registers CS ist anders (und natürlich der Wert
des Instruction-Pointers), dies kann aber beim G-Befehl umgangen
werden indem der Code in einen unbenutzten Speicherbereich des
Code-Segmentes des unterbrochenen Prozesses gelegt wird.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 84
■ Die Werte der Hilfs- und der Sonder-Register werden zwischen ver-
schiedenen Aufrufen nicht verändert; die Prozessor-Register
werden bei jedem Aufruf neu geladen.
■ Die Register SP und SS zeigen auf den Stack des unterbrochenen
Prozesses. Die Return-Adresse und der Wert des Flag-Registers,
die durch den INT-Aufruf auf den Stack gebracht wurden, werden
vom Stack des unterbrochenen Prozesses entfernt. Diese werden
von MDEBUG gespeichert und vor dem Beenden wieder auf den Stack
gebracht.
■ Die Adresse des DIB und die Adresse des Busy-Flags werden nur
einmal beim Start von MDEBUG im Initialisierungsteil ermittelt.
Die aktuellen Adressen im DIB werden bei jeder Neu-Anzeige des
Interpreter-Fensters neu ermittelt.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 85
Aufruf von MDEBUG im Graphikmodus
──────────────────────────────────
MDEBUG kann auch im Graphik-Modus aufgerufen werden, falls für die
installierte Graphikkarte ein Bildschirmtreiber geladen wurde.
(z.B. der Treiber 'MDHGCDRV.COM' für die Herkules-Karte)
Dieser Treiber kann als 'normales' Programm (.COM bzw. .EXE) oder
als Treiber (.SYS) realisiert sein.
Für die Beispieltreiber auf dieser Diskette wurde das .COM-Format
genommen, da solch ein Treiber nur geladen werden muß, falls er
gebraucht wird und nach dem Gebrauch wieder aus dem Speicher
entfernt werden kann.
MDEBUG kommuniziert mit dem Treiber über den Multiplex-Interrupt
2Fh. Dies hat den Vorteil, daß MDEBUG nicht überprüfen muß, ob
ein Treiber installiert ist oder nicht, da der Interrupt 2Fh immer
auf eine Routine zeigt (und niemals ins 'Nirwana'). Zudem erlaubt
es, daß ein Treiber vor oder nach MDEBUG geladen werden kann.
Beachtet werden muß aber, daß eine falsche Prozessnummer für die
Kommunikation über den Interrupt 2Fh das System zum Absturz bringen
kann! (siehe 'Vorbereitungen vor dem Start')
MDEBUG verwendet zur Kommunikation über den Interrupt 2Fh in der
Voreinstellung die Prozessnummer D0h. Diese kann allerdings über
den Parameter 'PRO' angepasst werden.
Hierbei ist aber zu beachten, daß die angegebene Prozessnummer
(und die folgende Prozessnummer, s.u.) entweder einem Treiber
für MDEBUG zugeordnet oder unbelegt ist!
Zur Überprüfung, ob eine Prozessnummer schon belegt ist, kann das
Util SHOW2FP.COM benutzt werden.
(siehe Vorbereitungen vor dem Start)
Der Treiber ist also für die Sicherung und Restaurierung der Bild-
schirmdaten in den Bildschirm-Modi, die MDEBUG nicht unterstützt,
verantwortlich. Dazu muß er mehrere Funktionen zur Verfügung
stellen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 86
Für alle Funktionen des Treibers gilt:
MDEBUG ruft alle Funktionen mit der Prozessnummer im Register AH
und der Funktionsnummer im Register AL auf. Der Treiber darf
nur aktiv werden, falls seine Prozessnummer angegeben ist. Alle
anderen Aufrufe des Interrupt 2Fh muß er ohne Änderung der Regis-
ter an den nächsten Prozess in der Kette für den Interrupt 2Fh
weiterleiten!
Der Treiber darf Register, die nicht zur Rückgabe von Ergebnissen
benötigt werden, in keinem Fall verändern!
Für alle Funktionen, außer der Funktion 0, des Treibers gilt:
Im Fehlerfall muß der Treiber mit gesetzten Carry-Flag und dem
Fehlercode im Register AX enden.
Bekannte Fehlercodes sind im Moment:
0FFFFh - Unerlaubter Aufruf einer Funktion
MDEBUG wertet im Moment Fehler des Treibers nur teilweise aus.
(siehe Beschreibungen der einzelnen Funktionen)
War der Treiber erfolgreich, muß er das Carry-Flag löschen und das
Register AX mit 0 belegen. Enthält das Register AX bei gelöschtem
Carry-Flag einen Wert ungleich 0, so wird dies als Warnung des
Treibers interpretiert.
Diese Möglichkeit ist im Moment allerdings noch reserviert, d.h.
MDEBUG ignoriert den Inhalt des Registers AX bei gelöschtem
Carry-Flag.
Alle Funktionen müssen entweder reentrant geschrieben sein oder
den Fehler-Code 0FFFFh bei Mehrfachaufrufen zurückgeben.
MDEBUG geht davon aus, daß immer nur ein Bildschirmtreiber
geladen ist.
Funktionen der Bildschirmtreiber
────────────────────────────────
MDEBUG erwartet, daß ein Bildschirmtreiber folgende Funktionen
unterstützt (siehe auch Quelltexte zu den Treibern):
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 87
Funktion 0 - Get Driver Status
───────────────────────────────────────────────────────────────────
Funktion: Ermitteln des Treiber-Status
Eingabe: AH = 0
Ausgabe: CF = 0
AL = 0FFh
AH = Treiber-Semaphor
AH = 0 ->> Treiber ist nicht aktiv
AH <> 0 ->> Treiber ist gerade aktiv oder wurde bei
einer Bearbeitung abgebrochen
BX = Code-Segment des Treibers
CX = Version von MDEBUG für die der Treiber
geschrieben wurde.
(CH = Hauptversion, CL = Unterversion)
DL = Puffer-Semaphor
DL <> 0 ->> Puffer ist belegt, d.h. Funktion 2
wurde aufgerufen aber Funktion 3 noch
nicht
DL = 0 ->> Puffer ist nicht belegt
DH = Show-Semaphor
DH <> 0 ->> Funktion 4 wurde aufgerufen aber
Funktion 5 noch nicht
DH = 0 ->> Aufrufe der Funktionen 4 und 5 waren okay
Bemerkungen:
Diese Funktion MUSS reentrant geschrieben sein, d.h. wiederein-
trittsfähig!
Wird eine ältere Versionsnummer als 1.60 zurückgegeben, so unter-
drückt MDEBUG alle Aufrufe des Bildschirmtreibers und gibt beim
nächsten Aufruf des Interpreters eine Fehlermeldung aus.
Diese Funktion wird bei jedem Neuaufruf von MDEBUG aufgerufen.
Der Puffer-Semaphor und der Show-Semaphor sind nur bei nicht
wiedereintrittsfähigen Treibern von Bedeutung. Falls die Funk-
tionen des Treibers reentrant sind, sollte hierfür immer Null
zurückgegeben werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 88
Funktion 1 - Init Driver
───────────────────────────────────────────────────────────────────
Funktion: Treiber-Reset
Eingabe: AH = 1
Ausgabe: CF = 0 ->> Treiber wurde initialisiert
AL = Treiber-Semaphor
AH = Puffer-Semaphor
CF = 1 ->> Treiber konnte nicht initialisiert werden
Bemerkungen:
Die Funktion 1 wird von MDEBUG direkt nach der Funktion 0 auf-
gerufen. Da es auch vorkommen kann, daß ein Aufruf von MDEBUG
zwischen einem Aufruf der Funktionen 2 und 3 bzw. 4 und 5 des
Treibers beendet wird, sollte diese Funktion alle Treiber-Daten
für ungültig erklären und alle Semaphore zurücksetzen.
Falls die Funktion 1 einen Fehler meldet, unterdrückt MDEBUG bis
zum Beenden des Aufrufes von MDEBUG alle Aufrufe des Bildschirm-
treibers.
Funktion 2 - Save Graphik data
───────────────────────────────────────────────────────────────────
Funktion: Sichern der Bildschirmdaten
Eingabe: AH = 2
Ausgabe: CF = 0 ->> Daten konnten gesichert werden oder Treiber
ist für den aktuellen Modus nicht zuständig.
CF = 1 ->> Daten konnten nicht gesichert werden
Bemerkungen:
Diese Funktion wird von MDEBUG vor der Passwort-Eingabe bzw. vor
der Anzeige der Fenster von MDEBUG aufrufen. Sie sollte, falls
sie für den aktuellen Modus zuständig ist, die Daten des akt-
uellen Bildschirm-Modus und den Bildschirminhalt sichern und den
Bildschirm in einen durch MDEBUG benutzbaren Text-Modus bringen.
Ein Fehler wird von MDEBUG noch nicht ausgewertet.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 89
Funktion 3 - Restore Graphik data
───────────────────────────────────────────────────────────────────
Funktion: Restaurieren der Bildschirmdaten
Eingabe: AH = 3
Ausgabe: CF = 0 ->> Daten konnten restauriert werden oder Treiber
ist für den akt. Modus nicht zuständig.
CF = 1 ->> Daten konnten nicht restauriert werden
Bemerkungen:
Diese Funktion wird von MDEBUG vor dem endgültigen Beenden des
Aufrufes aufgerufen. Sie sollte, falls die Funktion 2 den Bild-
schirmstatus gesichert hat, diesen wiederherstellen. Die Funktion
3 ist also das Gegenstück zur Funktion 2.
Ein Fehler wird von MDEBUG noch nicht ausgewertet.
Funktion 4 - Show saved data
───────────────────────────────────────────────────────────────────
Funktion: Anzeige des gesicherten Bildschirms
Eingabe: AH = 4
Ausgabe: CF = 0 ->> Daten konnten angezeigt werden oder Treiber
ist für den akt. Modus nicht zuständig.
CF = 1 ->> Daten konnten nicht angezeigt werden
Bemerkungen:
Diese Funktion wird von MDEBUG vor der Anzeige des Orignalbild-
schirms nach Eingabe der Taste <CTRL-F1> aufgerufen. Sie sollte,
falls ein durch die Funktion 2 gesicherter Bildschirm-Status vor-
liegt, diesen anzeigen.
Die Funktion muß den aktuellen Bildschirm-Inhalt vor der An-
zeige nicht sichern.
Ein Fehler wird von MDEBUG noch nicht ausgewertet.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 90
Funktion 5 - Switch back to text screen
───────────────────────────────────────────────────────────────────
Funktion: Umschalten des Bildschirmmodus in den durch die
Funktion 2 eingestellten Text-Modus
Eingabe: AH = 5
Ausgabe: CF = 0 ->> Bildschirmmodus wurde geändert oder Treiber
ist für den akt. Modus nicht zuständig.
CF = 1 ->> Bildschirmmodus konnte nicht geändert werden
Bemerkungen:
Diese Funktion wird von MDEBUG direkt nach der Eingabe einer
Taste bei der Anzeige des DOS-Screens über die Taste <CTRL-F1>
aufgerufen. Sie muß, falls die Funktion 4 ausgeführt werden
konnte, den Bildschirm wieder in den Modus, der durch die Funk-
tion 3 eingestellt wurde, bringen. Die Funktion ist also das
Pendant zur Funktion 4.
Die Funktion muß keinerlei Daten sichern und den Bildschirm-
Inhalt auch nicht restaurieren.
Ein Fehler wird von MDEBUG noch nicht ausgewertet.
Zwischen den beiden Aufrufen der Funktionen 4 und 5 wird von
MDEBUG nur ein Aufruf des Interrupt 16h zum Lesen einer Taste
ausgeführt.
Funktionen 06 bis 7Fh - reserviert
───────────────────────────────────────────────────────────────────
Die Funktionen 06h bis 7Fh sind reserviert aber im Moment noch
nicht belegt.
Funktionen 80h bis 0FFh - reserviert
───────────────────────────────────────────────────────────────────
Die Funktionen 80h bis 0FFh sind für weitere Treiberfunktionen
reserviert. Falls in eigenen Treibern weitere Funktionen, z.B.
zur Kommunikation zwischen dem residenten Teil und dem transien-
ten Teil eines Treibers, benötigt werden, sollten dafür nur
Funktionsnummern zwischen 80h und 0FFh gewählt werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 91
Erweiterungen von MDEBUG mittels Kommandotreiber
────────────────────────────────────────────────
MDEBUG erlaubt es, die Befehle des Interpreters über externe
Treiber (sogenannte Kommandotreiber) zu erweitern.
Die neuen Befehle können dann wie die internen Befehle benutzt
werden. Selbstverständlich können sie auch mit Parametern oder
Operanden angegeben werden. Die Verwendung in Befehlszeilen mit
mehreren Befehlen ist natürlich auch möglich. Die neuen Befehle
unterliegen dabei allerdings den gleichen Beschränkungen wie die
internen, d.h. nur das erste und das letzte Zeichen dieser ist
signifikant. (siehe auch 'Syntax der Befehle')
Es können auch mehrere verschiedene Kommandotreiber gleichzeitig
geladen sein (z.B. der Treiber MDHISDRV und der Treiber MDDISDRV).
MDEBUG ruft die Kommandotreiber vor der eigentlichen Auswertung
eines Befehls auf, so daß die internen Befehle auch durch neue
Befehle ersetzt oder erweitert werden können. Es ist damit z.B.
möglich eine erweiterte Syntax-Prüfung einzuführen oder bestimmte
Befehle zu unterdrücken.
Über Kommandotreiber können auch Tastenumbelegungen und Tasten-
neubelegungen implementiert werden. Auch diese Funktionen der
Treiber werden vor der eigentlichen Auswertung der Tasten auf-
rufen, so daß auch hier die Tastenbelegungen von MDEBUG über-
schrieben werden können.
Mit den Kommandotreibern kommuniziert MDEBUG ebenfalls über den
Interrupt 2Fh.
Die Prozessnummer für diesen Treiber ist die auf die Prozessnummer
für den Bildschirmtreiber folgende (in der Voreinstellung also
D0h + 1 = D1h). (siehe auch Quelltext des Treibers MDBSPDRV.COM)
Für alle Funktionen des Treibers gilt:
MDEBUG ruft alle Funktionen mit der Prozessnummer im Register AH
und der Funktionsnummer im Register AL auf. Der Treiber darf
nur aktiv werden, falls seine Prozessnummer angegeben ist und die
angegebene Funktionsnummer von ihm unterstützt wird.
Alle anderen Aufrufe des Interrupt 2Fh MUSS er mit unveränderten
Registerwerten weiterleiten!
Die Funktionen 0 und 1 müssen IMMER mit geänderten Registerwerten
an den nächsten Prozess in der Kette für den Interrupt 2Fh weiter-
gegeben werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 92
Falls eine der Funktionen 2, 3 oder 4 nicht ausgeführt werden kann,
muß der Treiber diesen Aufruf ebenfalls ohne Änderung der Register
weiterleiten.
Die Funktionen 10h, 11h und 12h DÜRFEN nie weitergegeben werden.
Der Treiber darf Register, die nicht zur Rückgabe von Ergebnissen
benötigt werden, in KEINEM Fall verändern!
Die Funktionen 0, 1 und 10h des Treibers müssen reentrant sein.
Funktionen der Kommandotreiber
──────────────────────────────
Jeder Kommandotreiber muß die folgenden Funktionen zur Verfügung
stellen:
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 93
Funktion 0 - Get Status
───────────────────────────────────────────────────────────────────
Funktion: Ermitteln des Status des Treibers
Eingabe: AH = 0
BX = Version von MDEBUG
(BH = Hauptversion, BL = Unterversion)
CX = Zähler
(*) DS:SI -> Identifikations-Tabelle von MDEBUG
(Aufbau siehe User-Int)
(*) ES = Segment der von MDEBUG benutzten Bildschirmseite
(Offset = 0)
(*) DI = Daten der von MDEBUG benutzen Bildschirmseite:
High-Byte: max. Anzahl Zeilen/Bildschirmseite
Low-Byte: max. Anzahl Spalten/Bildschirmzeile
Ausgabe: DL = 0FFh
BX = Falls die Versionsnummer von MDEBUG für die
der Treiber geschrieben wurde KLEINER als die in
BX übergebene Versionsnummer ist, muß der Treiber
diese in BX zurückgeben. Ansonsten darf BX nicht
verändert werden.
(BH = Hauptversion, BL = Unterversion)
CX = CX muß um eins erhöht werden.
Bemerkungen:
Der Aufruf der Funktion 0 muß an den nächsten Prozess in der
Kette für den Interrupt 2Fh weitergeleitet werden (nach der Ände-
rung der Registerwerte)!
Falls mindestens einer der geladenen Treiber veraltet ist unter-
drückt MDEBUG ALLE Aufrufe der Kommandotreiber und gibt beim
nächsten Aufruf des Interpreters eine Fehlermeldung aus.
Ein veralteter Kommandotreiber verursacht also die Ignorierung
aller geladenen Kommandotreiber durch MDEBUG.
MDEBUG arbeitet in dieser Version mit allen Treibern, die für
MDEBUG ab Version 1.52 geschrieben wurden zusammen.
Diese Funktion wird von MDEBUG bei jedem Aufruf aufgerufen.
Sie muß reentrant, d.h. immer möglich sein.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 94
Für die mit (*) gekennzeichneten Daten gilt:
Diese Daten werden von MDEBUG vor jedem Aufruf neu ermittelt.
Treiber, die diese Daten nutzen wollen, müssen diese daher bei
JEDEM Aufruf der Funktion 0 neu übernehmen. Außerdem MUSS in
diesem Fall der Treiber die Versionsnummer von MDEBUG im Register
BX oder in der Identifikations-Tabelle überprüfen, da diese Daten
erst ab der Version 1.60 von MDEBUG vorhanden sind!
Die Funktion wird ab der Version 1.70 von MDEBUG auch nach jeder
Neuermittlung der Daten des aktuellen Bildschirmmodus (Taste
<ALT-F9>) aufgerufen. Bei diesem Aufruf werden die zurückge-
gebenen Daten von MDEBUG aber nicht weiter berücksichtigt!
Funktion 1 - Init Driver
───────────────────────────────────────────────────────────────────
Funktion: Initialisieren des Treibers
Eingabe: AH = 1
CX = Zähler
Ausgabe: DL = DL muß auf 0FFh gesetzt werden, falls der Treiber
initialisiert werden konnte
(Andernfalls darf DL nicht verändert werden!)
CX = CX muß um eins erhöht werden, falls der Treiber
initialisiert werden konnte.
Bemerkungen:
Der Aufruf der Funktion 1 muß nach der Veränderung der Register-
werte an den nächsten Prozess in der Kette für den Interrupt 2Fh
weitergeleitet werden.
Diese Funktion wird von MDEBUG bei jedem Aufruf aufgerufen.
Falls kein Treiber initialisiert werden kann, unterdrückt MDEBUG
alle Aufrufe der Kommandotreiber bei diesem Aufruf.
Die Funktion muß immer möglich sein.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 95
Funktion 2 - Execute interpreter command
───────────────────────────────────────────────────────────────────
Funktion: Ausführen eines Befehls im Interpreter
Eingabe: AH = 2
BL = erstes Zeichen des Befehls
BH = letztes Zeichen des Befehls
(Leerzeichen, falls der Befehl nur ein Zeichen
lang ist)
DS:SI -> Parameter für den Befehl als ASCIIZ-String
Führende Leerzeichen sind schon entfernt.
Falls keine Parameter angegeben wurden zeigt
DS:SI auf ein Null-Byte.
DS:DI auf folgende Datenstruktur:
(Hinweis:
Dies ist die ORIGINAL-Struktur von MDEBUG! Änderungen
für die Register von MDEBUG müssen direkt hier ein-
getragen werden)
┌─────────────────┬───────┬─────────────────────────────────┐
│ Offset │ │ │
│ (relativ zu DI) │ Länge │ Funktion der Speicherstelle │
╞═════════════════╪═══════╪═════════════════════════════════╡
│ 00h │ Word │ Register SE │
│ 02h │ Word │ Register OF │
│ 04h │ Word │ Register FS │
│ 06h │ Word │ Register FO │
│ 08h │ Word │ Register AX │
│ 0Ah │ Word │ Register BX │
│ 0Ch │ Word │ Register CX │
│ 0Eh │ Word │ Register DX │
│ 10h │ Word │ Register SI │
│ 12h │ Word │ Register DI │
│ 14h │ Word │ Register DS │
└─────────────────┴───────┴─────────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 96
- Fortsetzung -
┌─────────────────┬───────┬─────────────────────────────────┐
│ Offset │ │ Inhalt │
│ (relativ zu DI) │ Länge │ │
╞═════════════════╪═══════╪═════════════════════════════════╡
│ 16h │ Word │ Register ES │
│ 18h │ Word │ Register BP │
│ 1Ah │ Word │ Register SS │
│ 1Ch │ Word │ Register SP │
│ 1Eh │ Word │ Register FL (Flags) │
│ 20h │ Word │ Register R0 │
│ 22h │ Word │ Register R1 │
│ 24h │ Word │ Register R2 │
│ 26h │ Word │ Register R3 │
│ 28h │ Word │ Register R4 │
│ 2Ah │ Word │ Register R5 │
│ 2Ch │ Word │ Register R6 │
│ 2Eh │ Word │ Register R7 │
│ 30h │ Word │ Register R8 │
│ 32h │ Word │ Konstante CS, Ret-Adresse │
│ 34h │ Word │ Konstante IP, Ret-Adresse │
│ 36h │ DWord │ gesicherte Monitor-Start-Adresse│
│ │ │ (Taste <F6>) │
│ 3Ah │24 Byte│ gesicherte Registerwerte. Hier │
│ │ │ stehen die Werte, die vor dem │
│ │ │ Beenden des Aufrufs von MDEBUG │
│ │ │ wieder geladen werden! │
│ │ │ Reihenfolge der Speicherung: │
│ │ │ AX, BX, CX, DX, SI, DI, DS, ES │
│ │ │ BP, SS, SP, Flags │
│ 52h │24 Byte│ Inhalt der Register vor dem │
│ │ │ Beenden des letzten Aufrufs von │
│ │ │ MDEBUG │
│ │ │ Reihenfolge der Speicherung: │
│ │ │ AX, BX, CX, DX, SI, DI, DS, ES │
│ │ │ BP, SS, SP, Flags │
│ 6Ah │ DWord │ Adresse des DOS-Info-Blocks │
│ 6Eh │ DWord │ Adresse des DOS-Busy-Flags │
│ 72h │ Word │ Offset des Registers, aus dem │
│ │ │ das Segment für das erste │
│ │ │ Monitorwindow ermittelt wird │
│ 74h │ Word │ Offset des Registers, aus dem │
│ │ │ der Offset für das erste │
│ │ │ Monitorwindow ermittelt wird │
│ 76h │ Word │ Name des Registers, aus dem │
│ │ │ das Segment für das erste │
│ │ │ Monitorwindow ermittelt wird │
└─────────────────┴───────┴─────────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 97
- Fortsetzung -
┌─────────────────┬───────┬─────────────────────────────────┐
│ Offset │ │ Inhalt │
│ (relativ zu DI) │ Länge │ │
╞═════════════════╪═══════╪═════════════════════════════════╡
│ 78h │ Word │ Name des Registers, aus dem │
│ │ │ der Offset für das erste │
│ │ │ Monitorwindow ermittelt wird │
│ 7Ah │ Word │ Speicherstelle, die als Pseudo- │
│ │ │ Register für den 1. Operanden │
│ │ │ gilt │
│ 7Ch │ Word │ Speicherstelle, die als Pseudo- │
│ │ │ Register für den 2. Operanden │
│ │ │ gilt │
│ 7Eh │ DWord │ letzte Monitor-Start-Adresse │
│ │ │ (Taste <X> im Monitor) │
└─────────────────┴───────┴─────────────────────────────────┘
Ausgabe: AL = 0FFh
CF = 1 ->> Fehler, AH enthält die Fehlernummer
Möglich sind folgende Werte:
1 - Syntax Fehler
2 - 1. Shell des COMMAND.COM ist aktiv
3 - ESC gedrückt
4 - BREAK gedrückt
5 - DOS ist aktiv
6 - ¿-Befehl endete
7 - Division durch Null
8 - Fehlerhafter Bildschirmtreiber
9 - Fehlerhafter Kommandotreiber
10 - Fehler 8 und 9
11 - unbekannter Fehler
12 - Neuer Fehler,
DS:SI -> neue Fehlermeldung als ASCIIZ-String
mit bis zu 30 Zeichen
Die Fehlermeldung gilt nur für diesen Fehler.
Falls sie kürzer als 30 Zeichen ist, wird sie
mit Leerzeichen bis auf 30 Zeichen aufgefüllt.
Alle anderen Werte werden wie der Wert 11 behandelt.
Ein Fehler wird von MDEBUG nur angezeigt aber nicht
ausgewertet. Tritt der Fehler in einer Befehlszeile auf
wird die Ausführung dieser abgebrochen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 98
CF = 0 ->> AH enthält den Returncode
Mögliche Werte sind hier:
0 - Ausführung der Befehlszeile fortsetzen
1 - MDEBUG verlassen (Neustart im Interpreter)
2 - MDEBUG verlassen mit automatischem Neuaufruf
sobald DOS nicht aktiv ist (Neustart im Interpreter)
5 - Übernehme neue Befehlszeile in den Eingabepuffer.
Die Befehlszeile muß als Nullstring bei DS:SI
stehen. Sie kann max. 66 Zeichen lang sein.
6 - wie 5, die Befehlszeile wird allerdings sofort
ausgeführt. Die neue Befehlszeile wird intern nicht
gespeichert. (d.h. sie gilt nicht für <CTRL-RETURN>
oder <SHIFT-RETURN>)
Alle anderen Werte werden wie der Wert 0 behandelt.
Bemerkungen:
Der Aufruf der Funktion 2 muß, ohne Änderung der Register, an
den nächsten Prozess in der Kette für den Interrupt 2Fh weiter-
geleitet werden falls der Befehl für diesen Treiber nicht bekannt
ist. Diese Funktion wird von MDEBUG für jeden Befehl vor der Aus-
wertung dieses aufgerufen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 99
Funktion 3 - Execute key in the monitor
───────────────────────────────────────────────────────────────────
Funktion: Bearbeiten einer Taste im Monitor
Eingabe: AH = 3
BX = Code der eingegebenen Taste wie er vom Interrupt
16h zurückgegeben wird.
CX = 0 ->> Der Cursor befindet sich in der 3. Spalte
1 ->> Der Cursor befindet sich in der 2. Spalte
2 ->> Der Cursor befindet sich im Offset-Feld
3 ->> Der Cursor befindet sich im Segment-Feld
DS:SI zeigt auf die gleiche Datenstruktur wie DS:DI
bei der Funktion 2.
ES:DI enthält die Adresse des Bytes, auf das der
Cursor im Moment steht
Ausgabe: AL = 0FFh ->> Taste erkannt, AH enthält den Returncode.
Mögliche Werte sind hier:
0 - Taste bearbeitet, keine weiteren Aktionen nötig
1 - MDEBUG verlassen (Neustart im Monitor)
2 - MDEBUG verlassen mit automatischem Neuaufruf
sobald DOS nicht aktiv ist (Neustart im Interpreter)
3 - Funktion konnte nicht ausgeführt werden, Fehlerton
ausgeben
4 - Taste wurde umdefiniert und muß weiter bearbeitet
werden. In diesem Fall muß BX den neuen Tastencode
enthalten.
Alle anderen Werte werden wie der Wert 0 behandelt.
Bemerkungen:
Der Aufruf der Funktion 3 muß, ohne Änderung der Register, an
den nächsten Prozess in der Kette für den Interrupt 2Fh weiter-
geleitet werden falls der Befehl für diesen Treiber nicht bekannt
ist.
Diese Funktion wird von MDEBUG nach jeder Eingabe einer Taste im
Offset- oder im Segment-Feld, in der mittleren und in der rech-
ten Spalte des Monitors (ausgenommen <CTRL-P>) aufgerufen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 100
Funktion 4 - Execute key in the interpreter
───────────────────────────────────────────────────────────────────
Funktion: Bearbeiten einer Taste im Interpreter
Eingabe: AH = 4
BX = Code der eingegebenen Taste wie er vom Interrupt
16h zurückgegeben wird.
DS:SI zeigt auf die gleiche Datenstruktur wie DS:DI
bei der Funktion 2
Ausgabe: AL = 0FFh ->> Taste erkannt, AH enthält den Returncode
Mögliche Werte sind hier:
0 - Taste bearbeitet, keine weiteren Aktionen nötig
1 - MDEBUG verlassen, (Neustart im Interpreter)
2 - MDEBUG verlassen mit automatischen Neuaufruf
sobald DOS nicht aktiv ist (Neustart im Interpreter)
3 - Funktion konnte nicht ausgeführt werden, Fehlerton
ausgeben
4 - Taste wurde umdefiniert und muß weiter bearbeitet
werden. In diesem Fall muß BX den neuen Tastencode
beinhalten.
5 - Übernehme neue Befehlszeile in den Eingabepuffer.
Die Befehlszeile muß als Nullstring bei DS:SI
stehen. Sie kann max. 66 Zeichen lang sein.
6 - wie 5, die Befehlszeile wird allerdings sofort aus-
geführt. Die neue Befehlszeile wird intern nicht
gespeichert. (d.h. sie gilt nicht für <CTRL-RETURN>
oder <SHIFT-RETURN> )
Alle anderen Werte werden wie der Wert 0 behandelt.
Bemerkungen:
Der Aufruf der Funktion 4 muß an den nächsten Prozess in der
Kette für den Interrupt 2Fh weitergeleitet werden falls die Taste
für diesen Treiber nicht bekannt ist. (ohne Änderung der Regis-
terwerte)
Die Funktion wird von MDEBUG nach jeder Eingabe einer Taste im
Interpreter (ausgenommen <CTRL-P>) aufgerufen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 101
Funktionen 05h bis 0Ah - reserviert
───────────────────────────────────────────────────────────────────
Die Funktionen 05h bis 0Ah sind reserviert aber im Moment noch
nicht belegt.
Funktionen 10h - Get adress of the old interrupt 2Fh
───────────────────────────────────────────────────────────────────
Funktion: Ermitteln des nächsten Prozesses in der Kette für den
Interrupt 2Fh und des Segments des Treibers
Eingabe: AH = 10h
Ausgabe: DL = 0FFh
ES:BX = Adresse des nächsten Prozesses in der Kette für
den Interrupt 2Fh
CX = Segment des Treibers
CX:DI = Adresse der Identifikationstabelle des Treibers
Aufbau der Identifikationstabelle eines Treibers:
┌──────────────┬───────┬──────────────────────────────┐
│ Offset in │ Länge │ Inhalt │
│ der Tabelle │ │ │
╞══════════════╪═══════╪══════════════════════════════╡
│ 00h │ 1Ah │ 'Kommandotreiber für MDEBUG'│
│ 1Ah │ 0Ch │ Name des Treibers als String│
│ │ │ (ohne Längenbyte und Ende- │
│ │ │ Kennzeichen) │
│ │ │ Dieser String muß für jeden │
│ │ │ Treiber verschieden sein! │
└──────────────┴───────┴──────────────────────────────┘
Bemerkungen:
Die Funktion wird nur vom Treiber selbst im Initialisierrungs-
teil zum Durchlaufen der Kette für den Interrupt 2Fh benutzt. Sie
muß auch implementiert sein, falls dieser Treiber sie nicht
benutzt!
Die Funktion muß reentrant sein und darf nicht weitergeleitet
werden!
Hinweis: Bei Treibern, die für MDEBUG Version 1.52 oder älter
geschrieben wurden, beginnt die Identifikationstabelle
immer am Offset 104h im Code/Datensegment.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 102
Funktion 11h - Start Driver
───────────────────────────────────────────────────────────────────
Funktion: Diese Funktion wird vom Initialsierungsteil aufgerufen
um dem Treiber mitzuteilen, daß er installiert ist.
Eingabe: AH = 11h
Ausgabe: DL = 0FFh
Bemerkungen:
Die Funktion wird nur vom Treiber selbst im Initialisierungsteil
benutzt. Sie darf den Aufruf nicht weiterleiten. Ein Fehler wird
je nach Implementierung berücksichtigt.
Die Funktion darf sonst nicht aufgerufen werden!
Funktion 12h - End Driver
───────────────────────────────────────────────────────────────────
Funktion: Diese Funktion wird vom DeInitialsierungsteil kurz vor
der DeInstallierung des Treibers aufgerufen, um ihm
Gelegenheit zum 'Aufräumen' zu geben.
Eingabe: AH = 12h
Ausgabe: DL = 0FFh
Bemerkungen:
Die Funktion wird nur vom Treiber selbst im DeInitialisierungs-
teil benutzt. Sie darf den Aufruf nicht weiterleiten. Ein Fehler
wird je nach Implementierung berücksichtigt.
Die Funktion darf sonst nicht aufgerufen werden!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 103
Funktionen 13h bis 7Fh - reserviert
───────────────────────────────────────────────────────────────────
Die Funktionen 13h bis 7Fh sind reserviert aber im Moment noch
nicht belegt.
Funktionen 80h bis 0FFh - reserviert
───────────────────────────────────────────────────────────────────
Die Funktionen 80h bis 0FFh sind für weitere Treiberfunktionen
reserviert. Falls in eigenen Treibern weitere Funktionen, z.B.
zur Kommunikation zwischen einem residenten Teil und dem tran-
sienten Teil eines Treibers, benötigt werden, sollten dafür nur
Funktionsnummern zwischen 80h und 0FFh gewählt werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 104
Zusätzlicher User-Interrupt
───────────────────────────
MDEBUG belegt zur Kommunikation mit anderen Programmen einen
zusätzlichen Interrupt (= User-Int). Dieser kann von anderen Pro-
grammen aufgerufen werden, um z.B. interne Variablen von MDEBUG zu
lesen oder zu schreiben oder auch um MDEBUG gezielt aufzurufen.
Der User-Int wird von MDEBUG nicht weitergeleitet.
Falls die Passwort-Abfrage aktiv ist, muß bei JEDEM Aufruf einer
Funktion des User-Ints die Register-Kombination DS:SI auf das
korrekte Passwort oder auf ein Null-Byte zeigen.
Ausnahme: Funktion 06h
Steht bei DS:SI ein Null-Byte, so wird das Passwort vom Benutzer
erfragt. Vor der Eingabe wird der Bildschirmmodus überprüft. Ist
dieser inkorrekt, wird die Eingabe des Passwortes abgebrochen und
im Register AX der Fehlercode 0FFFDh zurückgegeben.
Bei Aufruf mit DS:SI auf einem Null-Byte zeigend muß das auf-
rufende Programm dafür sorgen, daß auf dem aktuellen Stack noch
genügend Platz für mehrere Aufrufe des Interrupt 10h ist.
Zeigt DS:SI auf ein inkorrektes Passwort oder hat der Benutzer ein
falsches Passwort eingegeben, so wird die Funktion nicht aus-
geführt und im Register AX der Fehlercode 0FFFEh zurückgeliefert.
Ist kein Passwort installiert oder das Passwort inaktiv, so wird
der Inhalt der Register DS und SI ignoriert.
Folgende Funktionen sind für den User-Interrupt implementiert:
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 105
Funktion 0 - Status ermitteln
───────────────────────────────────────────────────────────────────
Eingabe: AH = 0
DS:SI -> Passwort oder ein Null-Byte
Ausgabe: AX = 0FFFEh ->> Passwort inkorrekt
AX = 0FFFDh ->> Bildschirmmodus inkorrekt
sonst:
ES = Inhalt des Registers SE des Monitors
DI = Inhalt des Registers OF des Monitors
CH = Farb-Attribut des Monitors
CL = Farb-Attribut des Interpreters
BH = Startzeile des Monitors
BL = Startzeile des Interpreters
AH = Scancode des Hotkeys
AL = Hotkey (als CHAR)
DL = Status der Umschalt-Tasten bei Aufruf
DH = Basis-Prozessnummer für den Interrupt 2Fh
(= Parameter 'PRO')
DS:SI -> Identifikations-Tabelle von MDEBUG
(Original!)
Aufbau der Identifikations-Tabelle von MDEBUG:
┌────────┬───────┬─────────────────────────────────────────┐
│ Offset │ Länge │ Inhalt │
╞════════╪═══════╪═════════════════════════════════════════╡
│ -02h │ Word │ Einsprung-Offset (siehe ?-Befehl) │
DS:SI ->│ 00h │ Word │ Segment des residenten MDEBUG │
│ 02h │ DWord │ Adresse der alten INT-08h-Routine │
│ 06h │ DWord │ Adresse der alten INT-09h-Routine │
│ 0Ah │ DWord │ Adresse der von MDEBUG benutzten │
│ │ │ Routine für den Interrupt 16h │
│ 0Eh │ n Byte│ Versions-Kennung als Pascal-String │
└────────┴───────┴─────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 106
Funktion 1 - Ermittle Adresse der Hilfsregister
───────────────────────────────────────────────────────────────────
Eingabe: AH = 1
DS:SI -> Passwort oder ein Null-Byte
Ausgabe: AX = 0FFFEh ->> Passwort inkorrekt
AX = 0FFFDh ->> Bildschirmmodus inkorrekt
sonst:
ES:DI-2 -> Hilfsregister R0
ES:DI -> Hilfsregister R1
ES:DI+2 -> Hilfsregister R2
ES;DI+4 -> Hilfsregister R3
usw.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 107
Funktion 2 - Status setzen
───────────────────────────────────────────────────────────────────
Eingabe: AH = 2
DS:SI -> Passwort oder ein Null-Byte
ES = Neuer Wert für das Register SE des Monitors
DI = Neuer Wert für das Register OF des Monitors
CH <> 0 ->> CH = Farb-Attribut des Monitors
CL <> 0 ->> CL = Farb-Attribut des Interpreters
BH <> 0 ->> BH = Startzeile des Monitors
BL <> 0 ->> BL = Startzeile des Interpreters
AL <> 0 ->> AL = Neuer Hotkey (als ASCII-Zeichen)
Intervall: 'A'..'Z' oder 'a'..'z'
DL <> 0 ->> DL = Status der Umschalt-Tasten
(Es darf nur das untere Nibble gesetzt
sein)
DH <> 0 ->> DH = Basis-Prozessnummer für den Interrupt 2Fh
Die Überprüfung der Werte geschieht äquivalent zu der Angabe der
Werte über Parameter bei der Installation.
Ausgabe: AX = 0 ->> ok
AX = 0FFFEh ->> Passwort inkorrekt
Keine Änderungen vorgenommen
AX = 0FFFFh ->> Aufruf nicht erlaubt
Keine Änderungen vorgenommen
AX = 0FFFDh ->> Bildschirmmodus inkorrekt
Keine Änderungen vorgenommen
sonst:
AX = Codierung eines Fehlers, und zwar:
┌─────┬────────────────────────────────────────┐
│ Bit │ Bedeutung falls gesetzt │
╞═════╪════════════════════════════════════════╡
│ 0 │ Falsche Startzeile für den Monitor │
│ 1 │ Falsche Startzeile für den Interpreter │
│ 2 │ Falscher Hotkey angegeben │
│ 3 │ Falsche Prozessnummer angegeben │
│ 4 │ reserviert (= 0) │
│ 5 │ reserviert (= 0) │
│ 6 │ reserviert (= 0) │
│ 7 │ reserviert (= 0) │
└─────┴────────────────────────────────────────┘
Im Falle eines Fehlers werden nur die korrekten Werte
übernommen, die anderen bleiben unverändert.
Die Werte der Register SE und OF werden immer geändert.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 108
Funktion 3 - Aufruf von MDEBUG
───────────────────────────────────────────────────────────────────
Eingabe: AH = 3
DS:SI -> Passwort oder ein Null-Byte
ES:DI = Adresse des anzuzeigenden Speicherbereichs
Die Werte werden in die Register SE und OF geladen und
die Register-Kombination SE:OF wird als Monitor-Start-
Adresse genommen.
Ausgabe: AX = 0FFFFh ->> Aufruf nicht erlaubt
AX = 0FFFEh ->> Passwort inkorrekt
AX = 0FFFDh ->> Aufruf nicht erlaubt aufgrund eines
inkorrekten Bildschirmmodus
Falls das Passwort korrekt abgefragt werden konnte,
sind die Register SE und OF geändert und werden für die
Monitor-Start-Adresse genommen.
Falls ok, wird kein Register von MDEBUG verändert.
Das Flag für den automatischen Aufruf von MDEBUG falls
DOS nicht aktiv ist wird gelöscht.
Funktion 4 - Aufruf von MDEBUG mit den akt. Werten
──────────────────────────────────────────────────
Eingabe: AH = 4
DS:SI -> Passwort oder ein Null-Byte
Ausgabe: AX = 0FFFFh ->> Aufruf nicht erlaubt
AX = 0FFFEh ->> Passwort inkorrekt
AX = 0FFFDh ->> Aufruf nicht erlaubt aufgrund
eines falschen Bildschirmmodus
Falls ok, wird kein Register von MDEBUG verändert.
Das Flag für den automatischen Aufruf von MDEBUG falls
DOS nicht aktiv ist wird gelöscht.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 109
Funktion 5 - Lösche oder Setze Flags von MDEBUG
───────────────────────────────────────────────────────────────────
Eingabe: AH = 5
DS:SI -> Passwort oder ein Null-Byte
BL = Neuer Wert des Flags
BL = 0 ->> Aufruf von MDEBUG erlauben
BL <> 0 ->> Aufruf von MDEBUG verbieten
Ausgabe: AX = 0FFFEh ->> Passwort inkorrekt
AX = 0FFFDh ->> Bildschirmmodus inkorrekt
sonst:
BL = Alter Wert des Flags
BH = Alter Wert des Flags für den Aufruf von MDEBUG
falls DOS nicht aktiv ist
Das Flag für den automatischen Aufruf von MDEBUG falls
DOS nicht aktiv ist wird gelöscht.
Diese Funktion sollte NIEMALS aus MDEBUG heraus auf-
gerufen werden!
Funktion 6 - Ermittle Passwort-Status
───────────────────────────────────────────────────────────────────
Eingabe: AH = 6
(Keine Abfrage des Passwortes!)
Ausgabe: AL = 0 ->> Passwort inaktiv
AL = 1 ->> Passwort aktiv
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 110
Funktion 7 - Ermittle aktiven Teil von MDEBUG
───────────────────────────────────────────────────────────────────
Eingabe: AH = 7
DS:SI -> Passwort oder ein Null-Byte
Ausgabe: AX = 0FFFEh ->> Passwort inkorrekt
AX = 0FFFDh ->> Bildschirmmodus inkorrekt
sonst:
Bit 0 von AL = 1 ->> der nächste Aufruf von MDEBUG
startet im Interpreter
Bit 0 von AL = 0 ->> der nächste Aufruf von MDEBUG
startet im Monitor
Bit 1 von AL = 1 ->> der nächste Aufruf von MDEBUG
startet in der Online-Hilfe
Bit 1 von AL = 0 ->> der nächste Aufruf von MDEBUG
startet nicht in der Online-Hilfe
Die zurückgegebenen Werte sind nur korrekt, falls
MDEBUG im Moment nicht aktiv ist.
Funktionen 8 bis 0FFh - reserviert
───────────────────────────────────────────────────────────────────
Eingabe: AH = 8
Ausgabe: AX = 0FFFCh ->> unbekannte Funktionsnummer
Sonstiges zum User-Int
───────────────────────────────────────────────────────────────────
Der Fehler 'Aufruf nicht erlaubt' tritt auf, falls das Aktiv-Flag
von MDEBUG noch gesetzt ist. Dies passiert z.B. falls MDEBUG über
einen nicht zurückkehrenden Interrupt (23h, 24h, etc.) verlassen
wird.
In diesem Fall muß das Flag durch einen Aufruf von MDEBUG mit dem
Parameter 'SET' oder durch den Aufruf der Funktion 05h des User-
Ints mit BL = 0 zurückgesetzt werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 111
Anhang A
Fehlermeldungen von MDEBUG
──────────────────────────
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 112
Fehlermeldungen beim Aufruf von MDEBUG
──────────────────────────────────────
Nachfolgend die Auflistung aller möglichen Fehlermeldungen von
MDEBUG jeweils, falls nötig, inclusive einer kurzen Erläuterung der
Fehlerursache.
Fehler, die zum Abbruch des Programms führen, geben zusätzlich die
Meldung
Programmausführung beendet.
aus.
■ Nicht genügend freier Speicher vorhanden!
Der transiente Teil von MDEBUG benötigt mindestens 64 K freien
Speicher.
■ MDEBUG: Falsche DOS-Version, es ist mindestens Version 3.0 erforderlich!
Da in diesem Fall das Programm über den Interrupt 20h beendet
wird, kann kein Errorlevel zurückgegeben werden.
■ Der Parameter MAKE ist nur in der Vollversion möglich!
Betr.: Parameter MAKE in der Shareware-Version.
Bevor der Parameter in der Vollversion genutzt werden kann, muß
die Registrierungs-Nummer mit dem Programm SETREGNR.EXE in die
Datei MDEBUG.COM eingetragen worden sein!
■ MDEBUG: Fehler bei der Speicher-Freigabe!
Warnung: Die MCB-Liste kann zerstört sein!
Betr.: Parameter EXIT
Der Speicher des residenten MDEBUG konnte nicht freigegeben
werden. Da sehr wahrscheinlich die Speicherverwaltung von MS-DOS
zerstört ist, sollte das System neu gebootet werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 113
■ Interrupt Nr. <nn> ist schon belegt!
Betr.: Parameter INT
Der Offset- oder Segment-Wert in der Interrupt-Tabelle für den
angegebenen Interrupt bzw. der Voreinstellung ist ungleich Null,
d.h. MDEBUG geht davon aus, daß er schon belegt ist.
Bei einem Aufruf mit dem Parameter 'SET' wird der User-Int der
residenten Version nicht verändert.
Der Fehler kann nicht auftreten falls der Parameter 'INT' mit dem
Schalter ',N' angegeben wird.
■ MDEBUG: MDEBUG ist nicht letztes Programm in der Interrupt-Kette
für den Interrupt 08h!
MDEBUG wurde nicht aus dem Speicher entfernt.
MDEBUG: MDEBUG ist nicht letztes Programm in der Interrupt-Kette
für den Interrupt 09h!
MDEBUG wurde nicht aus dem Speicher entfernt.
Betr.: Parameter EXIT
Nach MDEBUG wurde mindestens ein Programm geladen, daß den
Interrupt 08h und/oder den Interrupt 09h verbiegt. Soll MDEBUG
aus dem Speicher entfernt werden, müssen vorher alle nach MDEBUG
geladenen Programme, die einen der Interrupts 08h oder 09h ver-
biegen, entfernt werden.
■ MDEBUG: Das Passwort ist fehlerhaft!
Betr.: Parameter EXIT oder SET
Es wurde versucht, die Parameter einer mit einem aktivem Passwort
installierten Version von MDEBUG durch eine Version mit einem
anderen oder nicht-installierten Passwort zu ändern (bzw. das
Programm aus dem Speicher zu entfernen).
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 114
■ MDEBUG: Unbekannte Version von MDEBUG installiert!
Betr.: Installieren von MDEBUG oder ändern einer installierten
Version von MDEBUG
Dieser Fehler tritt auf, falls mehrere Versionen von MDEBUG
gemischt verwendet werden sollen, oder ein anderes speicher-
residentes Programm mit dem Namen 'MDEBUG' installiert ist.
Der Fehler kann auch auftreten, falls MDEBUG durch ein anderes
Programm aus dem Speicher entfernt wurde. Eine Installation
dieser Version von MDEBUG ist dann nicht möglich.
■ MDEBUG: Falscher Parameter angegeben!
■ MDEBUG: Fehler beim Lesen der Datei <name>
Betr.: Parameter &name
Der Inhalt des PSP wird nicht verändert.
Der Fehler führt nicht zum Programm-Abbruch.
■ 00000 Bytes aus der Datei <name>
nach nnnnh:mmmmh eingelesen
Betr.: Parameter &name
Dies ist kein Fehler als solcher. Die Meldung wird ausgelöst
durch eine Eingabedatei für den Parameter '&name' ohne den
Schalter ',N' bei der am Anfang soviele Kommentare stehen, daß
der gesamte Puffer für die Datei mit ihnen belegt ist und kein
Platz mehr für den eigentlichen Dateiinhalt ist. Die Kommentare
in der Eingabedatei sollten deshalb, falls möglich, ans Ende der
Datei gestellt werden.
Der Fehler führt nicht zum Programm-Abbruch.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 115
■ MDEBUG: Fehler beim Schreiben der Datei <name>
Betr.: Parameter *name
Falls die Datei schon teilweise geschrieben wurde, wird sie nicht
gelöscht.
Der Fehler führt nicht zum Programm-Abbruch.
■ 00000 Bytes aus dem PSP ab nnnnh:mmmmh in die Datei <name>
gespeichert.
Betr.: Parameter *name
Dies ist kein Fehler als solcher. Die Meldung besagt nur, daß
am Offset 'mmmm' im PSP der residenten Version von MDEBUG ein
Null-Wort steht, daß von MDEBUG als Ende-Kennung genommen wird.
(da der Schalter ',N' nicht angegeben wurde)
Der Fehler führt nicht zum Programm-Abbruch.
■ MDEBUG: Angegebener Name für die Hilfstextdatei ist fehlerhaft!
■ MDEBUG: Hilfstextdatei <name.ext> nicht gefunden.
■ MDEBUG: Fehler beim Lesen der Hilfstextdatei <name.ext>
■ MDEBUG: Die Hilfstextdatei <name.ext> hat ein falsches Format.
Betr.: Parameter HELP
Der Hilfstext einer residenten Version wird nicht verändert.
■ MDEBUG: Die Hilfstextdatei ist zu groß und wurde nicht vollständig
gelesen.
Betr.: Parameter HELP
Die Online-Hilfe ist trotzdem verfügbar, allerdings nur die voll-
ständig geladenen Zeilen der angegebenen Datei.
Der Fehler führt nicht zum Programm-Abbruch.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 116
■ MDEBUG: Die Hilfstext-Routinen sind in der residenten Version
nicht vorhanden!
Betr.: Parameter HELP
Über den Parameter 'HELP' kann nur ein Hilfstext in eine
residente Version eingelesen werden, falls diese mit Online-Hilfe
installiert wurde. (durch einen der Parameter 'HELP' oder 'BUF'
bei der Erstinstallation)
■ MDEBUG: Der Puffer der residenten Version ist zu klein!
Die Hilfstextdatei wurde nicht vollständig gelesen.
Betr.: Parameter HELP zur Änderung einer residenten Version
Es werden nur die vollständig gelesenen Zeilen in die residente
Version übernommen.
Der Fehler führt nicht zum Programm-Abbruch.
■ MDEBUG: Der Parameter MAKE ist nicht möglich!
Betr.: Parameter MAKE
Die Parameter
'STH', 'SET', 'EXIT', '&name', '*name',
'#', 'DEF' und '?'
dürfen nicht mit 'MAKE' zusammen angegeben werden.
■ MDEBUG: Fehler beim Löschen von MDEBUG.BAK!
MDEBUG: Fehler beim Umbenennen von MDEBUG.COM!
MDEBUG: Fehler beim Erstellen von MDEBUG.COM!
Betr.: Parameter MAKE
Entweder kann die Datei MDEBUG.COM nicht umbenannt werden oder
die Datei MDEBUG.BAK kann nicht gelöscht werden oder die Datei
MDEBUG.COM kann nicht geschrieben werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 117
■ MDEBUG: Angegebene Prozessnummer ist fehlerhaft!
Betr.: Parameter PRO
■ MDEBUG: Angegebener Wert für das Bildschirmsegment ist fehlerhaft!
Betr.: Parameter TEXT
■ MDEBUG: Angegebene Bildschirmseite für den Parameter "text" ist
fehlerhaft!
Betr.: Parameter TEXT
■ MDEBUG: Der Wert des Parameters REALCURSOR ist fehlerhaft!
Betr.: Parameter RealCursor
Der Wert für den Parameter RealCursor kann nur 1 oder 0 sein.
■ MDEBUG: Angegebene Puffer-Größe ist fehlerhaft!
Betr.: Parameter BUF
■ MDEBUG: Angegebene Interrupt-Nummer ist fehlerhaft!
Betr.: Parameter INT
■ MDEBUG: Angegebene Interpreter-Farb-Nummer ist fehlerhaft!
Betr.: Parameter CoD
■ MDEBUG: Angegebene Monitor-Farb-Nummer ist fehlerhaft!
Betr.: Parameter CoM
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 118
■ MDEBUG: Angegebene Hilfsfarbe <m> ist fehlerhaft!
Betr.: Parameter CoHm
<m> wird durch die Nummer der Hilfsfarbe, die geändert werden
sollte ersetzt.
■ MDEBUG: Angegebenes Attribut für den Cursor ist fehlerhaft!
Betr.: Parameter CoC
■ MDEBUG: Angegebene Interpreter-Start-Zeile ist fehlerhaft!
Betr.: Parameter RoD
■ MDEBUG: Angegebene Monitor-Start-Zeile ist fehlerhaft!
Betr.: Parameter RoM
■ MDEBUG: Angegebene Hilfsfenster-Start-Zeile ist fehlerhaft!
Betr.: Parameter RoH
■ MDEBUG: Angegebenes Monitor-Segment ist fehlerhaft!
Betr.: Parameter SE=nnnn
■ MDEBUG: Angegebenes Register für das Segment des Monitors ist
fehlerhaft!
Betr.: Parameter SE=reg
■ MDEBUG: Angegebener Monitor-Offset ist fehlerhaft!
Betr.: Parameter OF=nnnn
■ MDEBUG: Angegebenes Register für den Offset des Monitors ist
fehlerhaft!
Betr.: Parameter OF=reg
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 119
■ MDEBUG: Angegebener Hotkey ist fehlerhaft!
■ MDEBUG: Angegebener Status der Umschalt-Tasten ist fehlerhaft!
Betr.: Parameter KEY
■ MDEBUG: Angegebener Dateiname für den Parameter "&name" ist fehlerhaft!
■ MDEBUG: Angegebener Offset für den Parameter "&name" ist fehlerhaft!
■ MDEBUG: Angegebene Länge für den Parameter "&name" ist fehlerhaft!
■ MDEBUG: Angegebener Schalter für den Parameter "&name" ist fehlerhaft!
Betr.: Parameter &name
■ MDEBUG: Angegebener Dateiname für den Parameter "*name" ist fehlerhaft!
■ MDEBUG: Angegebener Offset für den Parameter "*name" ist fehlerhaft!
■ MDEBUG: Angegebene Länge für den Parameter "*name" ist fehlerhaft!
■ MDEBUG: Angegebener Schalter für den Parameter "*name" ist fehlerhaft!
Betr.: Parameter *name
■ MDEBUG: Das Environment konnte nicht freigegeben werden!
MDEBUG wurde nicht installiert!
■ MDEBUG: Das Programm konnte nicht resident gemacht werden!
MDEBUG wurde nicht installiert!
Dieser Fehler kann nur auftreten, falls der Interrupt 21h
aufgerufen mit der Funktionsnummer 31h zurückkehrt! Falls der
Fehler auftritt, wird MDEBUG über die Funktion 4Ch des Interrupts
21h beendet (d.h. es bleibt NICHT speicherresident!)
■ MDEBUG: Das Programm konnte nicht korrekt beendet werden!
Starte neuen Versuch ...
Dieser Fehler kann nur auftreten, falls der Interrupt 21h auf-
gerufen mit der Funktionsnummer 4Ch zurückkehrt. In diesem Fall
versucht MDEBUG sich über den Interrupt 20h zu beenden.
■ Interner Fehler, bitte den Autor kontaktieren!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 120
Meldungen des Interpreters von MDEBUG
─────────────────────────────────────
■ *** Taste ***
Aufforderung des W-Befehls eine Taste zu betätigen.
■ G-Command aktiv
Diese Meldung wird angezeigt während ein G-Befehl bearbeitet wird.
■ ! Syntax Error
Ein Interpreter-Befehl wurde fehlerhaft eingegeben.
■ ! ESC pressed
Der W-Befehl wurde mit der Taste <ESC> quittiert.
■ ! BREAK-key pressed
Die BREAK-Taste wurde gedrückt.
■ ! Busy-Flag not Zero
Der angegebene Befehl kann nur ausgeführt werden, falls DOS nicht
aktiv ist.
■ ! ¿-Command ended
Der Wert des Operanden des ¿-Befehls ist gleich 0 (->> FALSE).
■ ! Division by Zero
Es wurde versucht, durch Null zu teilen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 121
■ ! 1. COMMAND-Shell aktiv
Dieser Fehler tritt auf, falls der von MDEBUG unterbrochene Pro-
zess die oberste Ebene des aktuellen Shell-Programmes ist, und
versucht wird, diesen über die Taste <CTRL-F10> abzubrechen.
■ ! Invalid C-Driver
MDEBUG hat einen veralteten Kommandotreiber in der Interrupt-
Kette für den Interrupt 2Fh ermittelt. MDEBUG unterdrückt in
diesem Fall ALLE Aufrufe aller Kommandotreiber. MDEBUG überprüft
bei jedem Aufruf die installierten Kommandotreiber, so daß der
Fehler durch Entfernen des veralteten Kommandotreibers behoben
werden kann.
■ ! Invalid G-Driver
MDEBUG hat einen veralteten Bildschirmtreiber in der Interrupt-
Kette für den Interrupt 2Fh ermittelt. MDEBUG unterdrückt in
diesem Fall ALLE Aufrufe des Bildschirmtreibers. MDEBUG überprüft
bei jedem Aufruf den installierten Bildschirmtreiber, so daß der
Fehler durch Entfernen des veralteten Bildschirmtreibers behoben
werden kann.
■ ! Invalid C- and G-Driver
Die beiden vorherigen Fehler zusammen sind aufgetreten.
■ ! Not Found
Diese Meldung gibt der SH-Befehl aus, falls der Suchstring nicht
gefunden wurde.
■ ! Unknown Error
Dieser Befehl kann nur auftreten, falls ein Kommandotreiber
einen unbekannten Fehlercode zurückliefert.
Weitere Meldungen des Interpreters von MDEBUG
─────────────────────────────────────────────
Jeder Kommandotreiber kann weitere Fehlermeldungen bereitstellen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 122
Anhang B
Programm-Interna
────────────────
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 123
Hinweise für die Fehlersuche - Trouble-Shooting
───────────────────────────────────────────────
Falls bei der Arbeit mit MDEBUG ein Fehler auftritt, bitte zuerst
einmal die nachfolgenden Informationen durchlesen und überprüfen,
ob der Fehler damit gefunden werden kann:
■ Es finden keinerlei Überprüfungen statt, ob eine Lese/Schreib-
operation über eine Segment-Adresse geht.
Falls z.B. das Wort an der Adresse nnnn:0FFFFh gelesen wird, so
wird das Lowbyte von der Adresse nnnn:0FFFFh und das Highbyte von
der Adresse nnnn:0000 gelesen.
Allerdings berücksichtigt MDEBUG, daß die Prozessoren ab dem
80286 einen Wortzugriff über eine Segmentgrenze nicht korrekt
ausführen und teilt deshalb wortweise Speicherzugriffe in jeweils
zwei byteweise Speicherzugriffe.
■ Ein Aufruf über den Hotkey sollte nicht während einer Disketten-
oder Plattenoperation (->> LED des Laufwerkes ist an) erfolgen!
■ Das Trap-Flag sollte bei der Benutzung von MDEBUG immer gelöscht
sein. Ansonsten sind die Auswirkungen der Befehle nicht vorher-
sehbar (bis hin zum Systemabsturz!).
■ Ein 'INT 021'-Befehl sollte nur gegeben werden, wenn das Busy-
Flag auf 0 steht, d.h. DOS nicht aktiv ist. Ausgenommen hiervon
sind nur die wiedereintrittsfähigen Funktionen des Interrupts
21h, bei MS-DOS 3.3 die Funktionen 33h, 50h, 51h, 62h, und 64h.
Da der COMMAND.COM zum Lesen der Eingaben die Funktion 0Ah des
Interrupts 21h benutzt, ist, falls der COMMAND.COM aktiv ist, das
DOS-Busy-Flag gesetzt bis ein Befehl oder ein Programm ausgeführt
wird.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 124
■ MDEBUG benutzt im Initialisierungsteil folgende undokumentierte
Funktionen des Interrupt 21h:
■ Funktion 52h: Ermittle Adresse des DOS-Info-Blocks (DIB)
Ausgabe: ES:BX -> DIB (= 'List of Lists')
und
■ Funktion 34h: Ermittle Adresse des DOS-Busy-Flags
Ausgabe (ab DOS 3.0):
ES:BX -> DOS-Busy-Flag (1 Byte)
ES:BX-1 -> Critical-Error-Flag
(1 Byte)
■ MDEBUG wertet das aktuelle PSP, aus um zu ermitteln, ob der beim
Aufruf unterbrochene Prozess die oberste Ebene des SHELL-
Prozesses (normalerweise das Programm COMMAND.COM) ist.
Zur Ermittlung der aktuellen PSP-Adresse wird die Unterfunktion
62h des Interrupt 21h benutzt. Diese ist immer möglich, d.h. sie
kann auch aufgerufen werden, falls DOS schon aktiv ist.
Der COMMAND.COM (oder jeder andere Kommando-Interpreter, z.B.
4DOS.COM) ist das einzige Programm, dessen Loader-Identifikation
im PSP (Wort, Offset 16h) auf das eigene Code-Segment zeigt.
Bei allen anderen Programmen enthält die Loader-Identifikation
das Segment des Programmes, welches das Programm aufgerufen hat.
(im Normalfall das Segment des COMMAND.COM)
Abgebrochen wird das Programm dann über die Funktion 4Ch des
Interrupt 21h. Diese ist zwar NICHT reentrant, da aber eine evtl.
unterbrochene Funktion des Interrupts 21h sowieso nicht mehr
beendet wird, ist dies in diesem Fall egal.
■ MDEBUG benutzt im residenten Teil (außer den o.a. Ausnahmen)
keine Funktionen des DOS-Interrupts 21h.
■ MDEBUG ermittelt seinen aktuellen Namen und das Directory in dem
die Datei 'MDEBUG.COM' steht aus dem Environment. Das Segment des
Environments steht im PSP beim Offset 2Ch.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 125
■ Zum Lesen und Setzen von Interrupt-Vektoren im transienten Teil
werden nur die Funktionen 25h und 35h des Interrupts 21h benutzt.
■ MDEBUG arbeitet in allen Bildschirmmodi mit mindestens 80 Zeichen
pro Zeile und mindestens 25 Zeilen pro Seite.
MDEBUG ermittelt alle Bildschirm-Werte im residenten Teil über
das BIOS-Segment. Der Interrupt 10h wird im residenten Teil nur
für das Sichern und Restaurieren des Original-Cursors benutzt
(falls dies nicht über den Parameter 'RealCursor=0' verboten
wird).
Zur Vermeidung eines Fehlers in manchen älteren BIOSsen sichert
MDEBUG vor jedem Aufruf des Interrupt 10h den Inhalt des Regis-
ters BP.
MDEBUG wertet zur Ermittlung der Bildschirm-Werte die folgenden
Speicherstellen aus:
┌─────────────┬─────────┬────────────────────────────────────┐
│ Adresse │ Länge │ Inhalt │
╞═════════════╪═════════╪════════════════════════════════════╡
│ 0040h:0049h │ 1 Byte │ Videomodus │
│ 0040h:004Ah │ 1 Wort │ Anzahl der Bildschirmspalten │
│ 0040h:004Ch │ 1 Wort │ Länge einer Bildschirmseite │
│ 0040h:004Eh │ 1 Wort │ Offset der akt. Bildschirmseite │
│ 0040h:0050h │ 8 Byte │ Array der Cursorpositionen │
│ 0040h:0060h │ 1 Wort │ Cursorform │
│ 0040h:0062h │ 1 Byte │ aktuelle Bildschirmseite │
│ 0040h:0063h │ 1 Wort │ I/O-Basisadresse des │
│ │ │ Videocontrollers │
│ 0040h:0065h │ 1 Byte │ Inhalt des CRT-Modusregisters │
│ 0040h:0084h │ 1 Byte │ Anzahl der Zeilen pro Seite -1 │
└─────────────┴─────────┴────────────────────────────────────┘
Die Anzahl der Zeilen pro Seite wird über das Byte bei 40h:84h
ermittelt. Falls der Inhalt dieser Speicherstelle ungleich 0 ist,
wird er zur Ermittlung der Anzahl Zeilen pro Seite genommen. Ist
der Wert gleich 0, so geht MDEBUG von 25 Zeilen pro Seite aus.
Das Byte bei 40h:84h enthält bei CGA- und HGC-Karten normaler-
weise 0, bei EGA- und VGA-Karten aber die Anzahl der Zeilen/Seite
minus 1. Da es auch HGC/CGA-Karten mit der Möglichkeit zur
Darstellung von mehr als 25 Zeilen gibt, wird hier nicht auf die
Existenz einer EGA- oder VGA-Karte getestet.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 126
Wenn die aktuelle Seite durch den Parameter 'TEXT' explizit an-
gegeben ist, geht MDEBUG immer von einem Bildschirm-Modus mit 80
Zeichen pro Zeile und 25 Zeilen pro Seite aus.
Bei Hercules-Karten wird der Modus (Graphik oder Text) über das
CRT-Modusregister und über das Lightpen-Register (Datenregister
10h des Video-Controllers) ermittelt.
Als Bildschirmsegment wird bei Hercules-Karten B000h und für alle
anderen Karten B800h genommen.
Die Daten des aktuellen Bildschirmmodi werden nach jedem Aufruf
über den Hotkey, den User-Int, dem automatischen Aufruf (über
die Taste <ALT-F5>) oder einen extra-Interrupt und nach dem
Betätigen der Taste <ALT-F9> ermittelt.
Alle Ausgaben erfolgen direkt in den Bildschirmspeicher.
Für Fehlermeldungen im Interpreter wird das Bit 7 des Farbattri-
buts gesetzt. Je nach dem aktuellen Modus der Graphik-Karte wird
damit eine blinkende Anzeige oder eine helle Farbe für die
Fehlermeldung gewählt.
■ Akustische Ausgaben erfolgen direkt über die Ports 42h und 43h.
■ MDEBUG setzt vorraus, daß zeitkritische Interrupt-Routinen dafür
sorgen, daß sie nicht unterbrochen werden können (durch CLI- und
STI-Befehle).
■ Ein Aufruf über den Hotkey wird über den Interrupt 9h erkannt.
Der eigentliche Aufruf von MDEBUG erfolgt aber in der Routine
für den Interrupt 8h (indirekter Aufruf).
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 127
Die Routine für den Interrupt 9h geht von folgenden Port-Adressen
aus:
┌──────┬─────────────────────────────────────────────────────┐
│ Port │ Bedeutung │
╞══════╪═════════════════════════════════════════════════════╡
│ 60h │ Datenport der Tastatur │
│ 61h │ Statusport der Tastatur für die Acknowledge-Meldung │
│ 20h │ Statusport des Interrupt-Controllers für die EOI- │
│ │ Meldung (EOI-Meldung = 20h) │
└──────┴─────────────────────────────────────────────────────┘
MDEBUG unterscheidet hierbei nicht zwischen einer 'normalen' und
einer MF2- oder AT-Tastatur.
■ Der Interrupt-Handler für den Interrupt 9h fängt, falls MDEBUG
aktiv ist, die Tasten <CTRL-C>, <CTRL-2> und <CTRL-BREAK> bzw.
<CTRL-ScorllLock> komplett ab. D.h. diese Tasten können auch
in einem Kommandotreiber NICHT verwendet werden!
■ Alle Tastatureingaben werden von MDEBUG über eine interne Routine
ermittelt, d.h. MDEBUG benutzt nicht den Interrupt 16h.
TSR-Programme, die den Aufruf über den Interrupt 16h erkennen,
können daher während eines Aufrufes von MDEBUG also nur über den
Interpreter-Befehl
'MOV AH,0 ^ INT 16' bzw. 'MOV AH,10 ^ INT 16'
(oder einen äquivalenten G- bzw. B-Befehl) aufgerufen werden.
Ausnahme hiervon:
Ab DOS 5.0 benutzt MDEBUG wieder den Interrupt 16h benutzt, da
ansonsten ein Aufruf von MDEBUG nicht möglich ist, falls die
Shell von DOS aktiv ist. MDEBUG benutzt in diesem Fall, falls
möglich, d.h. von der Routine für den Interrupt 16h unterstützt,
die Funktionen 10h, 11h und 12h für die Ermittlung der Tastatur-
eingaben. Falls die Funktionen 1xh vom BIOS nicht unterstützt
werden, verwendet MDEBUG die alten Funktionen 0h, 01h und 02h.
MDEBUG überprüft nur einmal im Initialisierungsteil ob die erwei-
terten Funktionen 1xh verwendet werden können!
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 128
MDEBUG sichert während eines Aufrufs alle Daten der Tastatur-
verwaltung. Dies sind folgende Speicherstellen:
┌─────────────┬─────────┬────────────────────────┐
│ Adresse │ Länge │ Inhalt │
╞═════════════╪═════════╪════════════════════════╡
│ 0040h:001Ah │ 1 Wort │ Tastatur-Head-Pointer │
│ 0040h:001Ch │ 1 Wort │ Tastatur-Tail-Pointer │
│ 0040h:001Eh │ 32 Byte │ Tastatur-Puffer │
│ 0040h:0080h │ 1 Wort │ Tastatur-Puffer-Anfang │
│ 0040h:0082h │ 1 Wort │ Tastatur-Puffer-Ende │
└─────────────┴─────────┴────────────────────────┘
■ MDEBUG belegt die Interrupt-Vektoren 09h (Hardware-Interrupt für
die Tastatur) und 08h (Hardware-Interrupt für die Uhr) und evtl.
einen der Interrupts zwischen 60h und 67h als User-Int.
Während der Installierung von MDEBUG und während eines Aufrufs
zur Änderung der Werte eine residenten Version werden außerdem
die Interruptvektoren 1Bh, 23h und 24h temporär auf eigene
Routinen umgeleitet. Die Interrupt-Vektoren 23h und 24h werden
nicht wieder zurückgesetzt (macht DOS bei Programm-Ende).
Ein Programmabbruch während des Aufrufes von MDEBUG.COM zur
Installation bzw. Änderung einer residenten Version über die
Tasten <CTRL-C> oder <CTRL-Break> ist nicht möglich, kritische
Fehler (MS-DOS: Retry, Ignore, Abort) werden abgefangen.
■ MDEBUG benutzt einen eigenen Stack. Dieser ist mit 100 Worten
deklariert. Da der Stack direkt hinter dem PSP liegt, wird bei
einem Stack-Überlauf aber zuerst das - von MDEBUG nicht mehr
benötigte - PSP von MDEBUG überschrieben, so das sich die max.
Stack-Größe mit
200 + 3 (JMP-Befehl) + 256 (PSP) = 459 Bytes = 229 Worte
ergibt.
Bisher haben sich aber die 100 Worte für den Stack als völlig
ausreichend erwiesen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 129
■ Der Code zur Ausführung von G-, B- und I-Befehlen wird jeweils
neu ermittelt und in den Programmcode eingepatcht (selbstmodifi-
zierender Code).
MDEBUG benutzt zusätzlich noch in einigen internen Routinen aus
Geschwindigkeits-Gründen selbstmodifizierenden Code.
■ Für Routinen zur Überprüfung, ob MDEBUG installiert ist gilt:
Alle folgenden Versionen (auch diese) schreiben in ihren MCB ab
dem Offset 08h den Namen des Programms ('MDEBUG ').
Ab DOS 4.00 wird dies schon vom Betriebssystem so gemacht; bei
DOS-Versionen vor Version 4.00 ist dieser Speicherbereich un-
genutzt.
Die Versionen werden sich nur durch die Versionskennung, die über
den User-Int zurückgegeben wird, unterscheiden lassen.
Der User-Int wird immer ein Interrupt zwischen 60h und 67h sein.
Direkt vor der Routine für den User-Int - d.h. der Einsprung-
Stelle der Interrupt-Routine - wird immer die Kennung 'USERINT'
stehen.
Die bestehenden Funktionen des User-Interrupts werden auf jeden
Fall beibehalten; Erweiterungen des Funktionsumfanges sind aber
möglich.
■ MDEBUG und alle Utils geben alle Meldungen und Fehlermeldungen
des transienten Teils über die Funktion 40h des Interrupt 21h auf
die Standard-Ausgabe aus. Sollte dabei ein Fehler auftreten (z.B.
falls die Ausgabe in eine Datei umgelenkt wird), so werden alle
Meldungen auf das Error-Handle 2 ausgegeben. Sollte auch dies
nicht möglich sein, so unterdrücken MDEBUG und alle Utils die
restlichen Meldungen während der Ausführung.
Ausgenommen hiervon ist nur die Fehlermeldung, die bei einer ver-
alteten DOS-Version ausgegeben wird. Diese wird über die Funktion
09h des Interrupts 21h ausgegeben.
■ MDEBUG und alle residenten Utils und Treiber schließen vor dem
Beenden des transienten Teils alle offenen Handles und geben ihr
Environment frei.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 130
Stack-Überlauf
──────────────
Falls bei Benutzung von MDEBUG ein 'Interner Stapelüberlauf' das
System zum Absturz bringt (erst ab DOS-Version 3.3), muß nach
dem Neustart des Computers in der Datei CONFIG.SYS der Wert für
den STACKS-Befehl erhöht oder auf 0,0 gesetzt werden und das
System neu gebootet werden. (siehe DOS-Handbuch)
Dies kann passieren, falls über MDEBUG öfter Prozesse während
der Ausführung einer Interrupt-Routine abgebrochen werden. Falls
der abgebrochene Interrrupt von der STACK-Verwaltung noch unter-
stützt wird, ist der dem unterbrochenem Interrupt zugeordnete
STACK-Frame dann immer noch als belegt gekennzeichnet und kann von
der STACK-Verwaltung nicht mehr verwendet werden.
Falls MDEBUG über den Hotkey aufgerufen wurde und der Interrupt
9h immer noch über die Stack-Verwaltung läuft, ist der STACK-
Frame der dem Interrupt 9h beim Aufruf zugeordnet war, ebenfalls
von der STACK-Verwaltung nicht mehr verwendbar. Gleiches gilt beim
Aufruf von MDEBUG über den Interrupt 8h nach dem Verlassen von
MDEBUG über <ALT-F5> falls der Interrupt 8h auch noch über die
STACK-Verwaltung läuft.
Zur Vermeidung dieses Problems, sollte der Abbruch eines Prozesses
über <CTRL-F10> nur äußerst sparsam verwendet werden. Vorbeugend
sollte mit dem Programm FREESTCK die STACK-Frames nach mehreren
Abbrüchen jeweils korrigiert werden. FREESTCK benötigt keine
Parameter oder Benutzer-Eingaben; es läuft erst ab DOS 3.3.
Aufruf von FREESTCK:
FREESTCK <RETURN>
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 131
Tastatur-Codes
──────────────
Als Funktionstasten werden von MDEBUG alle Tasten gewertet, die im
Lowbyte des Scancodes einen der Werte 00h, 0E0h oder 0F0h und im
Highbyte des Scancodes einen Wert ungleich 00h zurückliefern. Das
Lowbyte wird allerdings nicht weiter berücksichtigt.
Die ASCII-Zeichen 0E0h und 0F0h müssen über die Tasten-Kombination
<ALT-ASCIICode> eingegeben werden, wobei MDEBUG davon ausgeht, daß
das Highbyte in diesem Fall 0 ist.
Von MDEBUG erwartete Tastatur-Codes der Funktions-Tasten:
('xxh' steht für 00h, E0h oder F0h)
┌──────────────────────────────┬───────┬─────────┬───────┬────────┐
│ Taste [NumLock aus] mit ... │ │ SHIFT │ CTRL │ ALT │
╞══════════════════════════════╪═══════╪═════════╪═══════╪════════╡
│ <PgDn> │ 51xxh │ │ 76xxh │ A1xxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <PgUp> │ 49xxh │ │ 48xxh │ 99xxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <Home> │ 47xxh │ │ 77xxh │ │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <End> │ 4Fxxh │ │ 75xxh │ │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <CursorLeft> │ 4Bxxh │ │ 73xxh │ │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <CursorRight> │ 4Dxxh │ │ 74xxh │ │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <CursorUp> │ 48xxh │ │ 8Dxxh │ 98xxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <CursorDown> │ 50xxh │ │ 91xxh │ A0xxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <Insert> │ 52xxh │ │ │ │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <Delete> │ 53xxh │ │ │ │
└──────────────────────────────┴───────┴─────────┴───────┴────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 132
┌──────────────────────────────┬───────┬─────────┬───────┬────────┐
│ Taste mit ... │ │ SHIFT │ CTRL │ ALT │
╞══════════════════════════════╪═══════╪═════════╪═══════╪════════╡
│ <F1> │ 3Bxxh │ 54xxh │ 5Exxh │ 68xxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F2> │ 3Cxxh │ 55xxh │ 5Fxxh │ 69xxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F3> │ 3Dxxh │ 56xxh │ 60xxh │ 6Axxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F4> │ 3Exxh │ 57xxh │ 61xxh │ 6Bxxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F5> │ 3Fxxh │ 58xxh │ 62xxh │ 6Cxxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F6> │ 40xxh │ 59xxh │ 63xxh │ 6Dxxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F7> │ 41xxh │ 5Axxh │ 64xxh │ 6Exxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F8> │ 42xxh │ 5Bxxh │ 65xxh │ 6Fxxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F9> │ 43xxh │ 5Cxxh │ 66xxh │ 70xxh │
├──────────────────────────────┼───────┼─────────┼───────┼────────┤
│ <F10> │ 44xxh │ 5Dxxh │ 67xxh │ 71xxh │
└──────────────────────────────┴───────┴─────────┴───────┴────────┘
Die folgenden Tasten können nur in der Online-Hilfe benutzt werden
und können dafür nicht umdefiniert werden (wohl aber im Monitor
oder Interpreter):
┌──────────┬──────────────────────────────────────────────────────┐
│ │ Eingabe über │
│ ├────────────────────┬─────────────────────────────────┤
│ │ die oberste │ <ALT-n> mit n im externen │
│ Taste │ Tastenreihe │ Nummernblock │
╞══════════╪════════════════════╪═════════════════════════════════╡
│ <ALT-1> │ 7800h │ 0001h │
│ <ALT-2> │ 7900h │ 0002h │
│ <ALT-3> │ 7A00h │ 0003h │
│ <ALT-4> │ 7B00h │ 0004h │
│ <ALT-5> │ 7C00h │ 0005h │
│ <ALT-6> │ 7D00h │ 0006h │
│ <ALT-7> │ 7E00h │ 0007h │
│ <ALT-8> │ 7F00h │ 0008h │
│ <ALT-9> │ 8000h │ 0009h │
└──────────┴────────────────────┴─────────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 133
Make-Code der Aufruf-Taste
──────────────────────────
MDEBUG erwartet folgende Make-Codes für die Hotkey-Taste:
┌─────────────┬───────────┐ ┌─────────────┬───────────┐
│ ASCII-Code │ Make-Code │ │ ASCII-Code │ Make-Code │
╞═════════════╪═══════════╡ ╞═════════════╪═══════════╡
│ 'A' │ 1Eh │ │ 'N' │ 31h │
│ 'B' │ 30h │ │ 'O' │ 18h │
│ 'C' │ 2Eh │ │ 'P' │ 19h │
│ 'D' │ 20h │ │ 'Q' │ 10h │
│ 'E' │ 12h │ │ 'R' │ 13h │
│ 'F' │ 21h │ │ 'S' │ 1Fh │
│ 'G' │ 22h │ │ 'T' │ 14h │
│ 'H' │ 23h │ │ 'U' │ 16h │
│ 'J' │ 17h │ │ 'V' │ 2Fh │
│ 'I' │ 24h │ │ 'W' │ 11h │
│ 'K' │ 25h │ │ 'X' │ 2Dh │
│ 'L' │ 26h │ │ 'Y' │ 2Ch │
│ 'M' │ 32h │ │ 'Z' │ 15h │
└─────────────┴───────────┘ └─────────────┴───────────┘
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 134
Verträglichkeit gegenüber anderen Programmen
────────────────────────────────────────────
■ Bei Aufruf von MDEBUG über den Hotkey während WORD läuft, wird im
Graphikmodus kein akustisches Signal ausgegeben.
Zudem kommt MDEBUG der Tastaturverwaltung von WORD ins Gehege so
daß ein Aufruf von MDEBUG falls WORD läuft unterbleiben sollte.
■ Ein Maustreiber wird von MDEBUG nicht ausgeschaltet; eine Maus
hat in MDEBUG aber keine Funktion.
■ Da MDEBUG die normalerweise von Debuggern benutzten Interrupts 01
und 03 nicht benutzt, ist der Aufruf von MDEBUG aus 'normalen'
Debuggern heraus problemlos möglich.
■ Bei manchen DOS-Versionen 3.2 ist teilweise schon eine Stack-
Verwaltung wie ab DOS 3.3 implementiert. Hier lautet der Befehl
für die Datei CONFIG.SYS aber 'STACK=n,m'.
(siehe Stack-Überlauf).
Das Programm FREESTCK.COM läuft aber erst ab DOS 3.3.
■ MDEBUG läuft auch unter 4DOS ab Version 3.0 fehlerfrei.
■ Falls ein Aufruf von MDEBUG abgebrochen wird, z.B. durch einen
Befehl wie 'INT 20 <RETURN>', sind die Tastenkombination <CTRL-
ScrollLock> bzw. <CTRL-BREAK>, <CTRL-C> und <CTRL-2> blockiert.
Der Fehler kann durch den Aufruf von MDEBUG mit dem Parameter SET
behoben werden.
■ MDEBUG läuft auch unter DOS 5.0 fehlerfrei.
Ausnahme:
Falls der Swapper von DOS 5.0 aktiv ist, kann (muß aber nicht!)
ein Aufruf von MDEBUG das System zum Absturz bringen. Der Grund
dieses Fehlers ist mir, aufgrund fehlender Dokumentation zum
Swapper, leider noch nicht bekannt.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 135
Anhang C
Installieren von MDEBUG
───────────────────────
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 136
Installieren von MDEBUG
───────────────────────
Normalerweise kann MDEBUG sofort ohne eine Installation genutzt
werden.
Allerdings ist es in der Vollversion von MDEBUG möglich, eine Kopie
von MDEBUG.COM, in der die Voreinstellungen für die wichtigsten
Parameter den eigenen Wünschen angepasst sind, zu erstellen.
MDEBUG muß dazu mit dem Parameter 'MAKE' und den neuen Voreinstel-
lungen für die zu ändernden Parameter aufgerufen werden.
Falls z.B. die Farbattribute für den Monitor und den Interpreter
geändert werden sollen, lautet der Aufruf:
MDEBUG MAKE CoD=3E CoM=47
MDEBUG erstellt dann eine neue Kopie der Datei MDEBUG.COM in der
die Voreinstellungen für die beiden angegebenen Parameter ent-
sprechend geändert sind. Alle anderen Voreinstellungen werden hier-
durch nicht verändert. Ein eventuell installiertes Passwort wird
ebenfalls nicht verändert.
Natürlich können beim Aufruf der neu erstellten Kopie von MDEBUG
durch die explizite Angabe der Parameter die geänderten Voreinstel-
lungen wieder überschrieben werden. Es ist auch ohne weiteres
möglich, eine so erstellte Kopie von MDEBUG noch mal mit dem Para-
meter 'MAKE' zur Änderung der neuen Voreinstellungen aufzurufen.
Geändert werden können die Voreinstellungen für folgende Parameter:
'INT', 'KEY', 'STD', 'STM',
'CoM', 'CoD', 'CoHm', 'CoC'
'RoM', 'RoD', 'RoH',
'SEG=nnnn', 'SEG=reg', 'OFF=nnnn', 'OFF=reg',
'TEXT', 'GRAPH', 'REALCURSOR', 'PRO',
'LOAD', 'HELP', 'NOHELP' und 'BUF'.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 137
Ändern der Tastenbelegung von MDEBUG
────────────────────────────────────
Mit Hilfe der Ausgaben von MDEBUG bei der Angabe des Parameters '#'
kann die Tastenbelegung von MDEBUG den eigenen Wünschen angepasst
werden.
Die Ausgabe des Parameters '#' sieht wie folgt aus (verkürzt):
(Die Ausgabe sollte in eine Datei gelenkt werden; die angegebenen
Offsets können bei der aktuellen Version von MDEBUG anders lauten!
Falls Sie die Beispiele nachvollziehen wollen, verwenden Sie die
Tabellen, die über den Parameter '#' ausgegeben werden und nicht
die hier wieder gegebenen!!)
────────────────────────────────────────────────────────────────────────────
Offsets der Variablen für die Tastaturverwaltung in MDEBUG
(im geladenem Programm -> in MDEBUG.COM jeweils -0100h)
Offset der Tabelle mit dem High-Bytes der Funktions-Tasten: 1167h
Aufbau der Tabelle:
Offset in der Funktionstaste Inhalt
Tabelle
------------------------------------------------
00h <CTRL-F1> 5Eh
01h <CTRL-PgUp> 84h
{...}
26h <ALT-CursorDown> A0h
27h <ALT-CursorUp> 98h
28h <ALT-PageUp> 99h
29h <ALT-PageDown> A1h
Offset der Tabelle mit den Scancodes für den Aufruf über den Hotkey: 1127h
Aufbau der Tabelle:
Offset in der Taste Inhalt
Tabelle
--------------------------------------------
00h <A> 1Eh
01h <B> 30h
{...}
19h <Z> 15h
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 138
Offset der Tastenkodierungstabelle (alt) für den Interpreter: 1141h
Offset der Tastenkodierungstabelle (neu) für den Interpreter: 1154h
Länge der Tabellen: 0013h
Aufbau der Tabellen:
Offset in den Inhalt (alt) Inhalt (neu)
Tabellen
---------------------------------------------------
00h <CTRL-O> ------>> <|>
01h <ä> ----------->> <«>
{...}
12h <X> ----------->> <X>
────────────────────────────────────────────────────────────────────────────
Mit Hilfe dieser Tabellen kann nun die Tastenbelegung von MDEBUG
den eigenen Wünschen angepasst werden.
Dies ist vor allen dann nötig, falls eine von MDEBUG erwartete
Funktionstaste auf Ihren Computer unterdrückt wird (sei es von der
Tastatur oder vom Tastaturtreiber).
Erkennbar ist dieser Fall daran, daß nach dem Betätigen einer
Funktionstaste in MDEBUG nicht die gewünwschte Aktion erfolgt. In
diesem Fall sollten Sie zuerst in MDEBUG über die Befehlsfolge
MOV AH,0 ^I 16 <RETURN> { entsprechende Funktionstaste drücken}
oder falls die Funktion 10h von der Interrupt-Routine für den
Interrupt 16h unterstüzt wird:
MOV AH,10 ^I 16 <RETURN> { entsprechende Funktionstaste drücken}
den Scancode dieser Taste ermitteln (steht nach der Ausführung im
Register AX) und mit den von MDEBUG erwarteten Code vergleichen.
Stimmt der ermittelte Wert nicht mit dem von MDEBUG erwarteten Wert
überein, müssen Sie nach den unten angeführten Verfahren den von
MDEBUG erwarteten Scancode für die Taste korrigieren. Falls der
Wert übereinstimmt, empfielt sich die nochmalige Lektüre über
die Funktion der Taste in der Dokumentation - denn dann haben Sie
sehr wahrscheinlich irgend etwas falsch gemacht.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 139
Hinweis:
Falls Sie einen Tastaturtreiber verwenden, der die neuen Tastatur-
codes ab DOS 3.2 nicht unterstützt, sind umfangreiche Änderungen
der Tastenbelegung erforderlich. In diesem Fall sollten Sie einen
anderen Tastaturtreiber verwenden (möglichst einen, von dem auch
der Quellcode erhältlich ist)
Ich empfehle für diesen Fall den Tastaturtreiber K3.COM aus der
c't 7/88. Dieser ist inclusive Assembler-Quellcode über die c't
erhältlich.
Beispiel:
Die Tasten <ALT-CursorUp> und <ALT-CursorDown> liefern auf Ihrer
Tastatur keinen Code. Sie möchten deshalb für diese Funktionen die
Tasten <ALT-E> und <ALT-X> verwenden.
Um dies zu realisieren gehen Sie folgendermaßen vor:
Zuerst muß der Scancode der neuen Tasten ermittelt werden. Im
Interpreter von MDEBUG kann dies folgendermaßen erfolgen:
Geben Sie den Befehl
MOV AH,0 ^I 16 <RETURN>
ein und drücken Sie die entsprechende Taste. Notieren Sie den Wert
aus AX, dies ist der benötigte Scancode der neuen Taste.
Hinweis:
Alle Tasten, die in MDEBUG als Funktionstasten verwendet werden
sollen, müssen im LowByte den Wert 0h, 0E0h oder 0F0h liefern. Dies
sind die meisten Funktionstasten und ALT-<zeichen>-Kombinationen.
Diesen Vorgang wiederholen Sie für alle neuen Tasten.
Um im Beispiel fortzufahren gehen wir von folgenden Werten aus:
<ALT-E> - Scancode 1200h
<ALT-X> - Scancode 2D00h
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 140
Ermitteln Sie aus der Tabelle von MDEBUG den Offset der Funktions-
tasten-Tabelle ('Tabelle mit dem High-Bytes der Funktions-Tasten'),
im Beispiel ist der Wert 1167h. Dann muß aus der angezeigten
Tabelle der Offset der umzubelegenden Tasten entnommen werden. Im
Beispiel ist das für die Taste <ALT-CursorDown> 26 (hex.!) und für
die Taste <ALT-CursorUp> 27 (hex). Ermitteln Sie nun für jede Taste
den Offset in MDEBUG indem Sie den Offset der Tabelle plus dem
Offset der Taste in der Tabelle nehmen.
Hier: <ALT-CursorDown> : 1167h + 26h = 118Dh
<ALT-CursorUp> : 1167h + 27h = 118Eh
Nun starten Sie von der DOS-Ebene aus den DOS-Debugger Debug mit
DEBUG MDEBUG.COM <RETURN>
Jetzt kann für jede zu ändernde Taste über den Debug-Befehl
'e nnnn' die jeweilige Belegung von MDEBUG geändert werden. Im
Beispiel wäre das (die Kommentare hinter ';' bitte nicht mit ein-
geben)
- für <ALT-CursorDown>
e 118D <RETURN> ; ermittelte Adresse der Funktionstaste
2D <RETURN> ; neuer Scancode
<RETURN>
- für <ALT-CursorUp>
e 118E <RETURN> ; ermittelte Adresse der Funktionstaste
12 <RETURN> ; neuer Scancode
<RETURN>
Nachdem Sie so alle Belegungen angepasst haben, schreiben Sie die
geänderte Datei mit dem Befehl
w <RETURN>
zurück auf die Diskette/Platte. Beachten Sie bitte, daß Sie keine
anderen Speicherstellen im Programm verändern und während der
Debugsitzung auch keine Register über Debugbefehle verändern.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 141
Verlassen Sie Debug über den Befehl
q <RETURN>
Durch den erneuten Aufruf von MDEBUG mit dem Parameter '#' können
Sie nun überprüfen, ob die Änderungen gelungen sind.
Bei den angeführten Verfahren sind folgende Punkte zu berücksich-
tigen:
1. Die Änderungen sollten natürlich nur an einer Kopie von MDEBUG
durchgeführt werden!
2. Ein Scancode darf nicht zweimal vorkommen. Sollte dies doch
einmal vorkommen, wird von MDEBUG nur die letzte Angabe in der
Tabelle berücksichtigt. Die vorherigen Angaben werden ignoriert.
Dies kann aber genutzt werden, um eine bestimmte Funktion von
MDEBUG zu unterbinden.
Beispiel:
Falls für die Taste <CLRL-F10> der Scancode einer Taste die in
der Tabelle NACH dieser kommt eingesetzt wird, z.B. der Scancode
der Taste <F5>, so wird die Funktion, die der Taste <CTRL-F10>
zugeordnet ist, nie ausgeführt.
Gleiches erreicht man natürlich auch dadurch, daß man einen nie
vorkommenden Scancode einsetzt.
3. Die neue Tastenbelegung sollte auch in der Datei MDHELP.INP
geändert werden und diese dann neu übersetzt werden.
4. Die Codes der folgenden Tasten sollten nicht verändert werden:
<F1>, <F4>, <F10>, <CursorRight> und <CursorLeft>.
Weiteres Beispiel:
Sie möchten die Umbelegung der Taste <CTRL-O> aufheben, da Sie das
Zeichen '|' auch anders erzeugen können.
Dazu muß die Tastenkodierungstabelle (neu) oder die Tastenkodie-
rungstabelle (alt) verändert werden
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 142
Im Beispiel verändern wir die Tastenkodierungstabelle (alt), indem
wir die Umbelegung elimieren.
Zuerst ermitteln Sie wieder den Offset der benötigten Tabelle, hier
1141h, und den Offset der zu ändernden Tastenbelegung in der Tabel-
le, hier 00h.
Danach werden beide Werte wieder addiert um den Offset in MDEBUG zu
ermitteln, also
1141h + 00h = 1141h
Die Änderung an sich geschieht wieder über das Programm Debug.
(Aufruf: debug MDEBUG.COM <RETURN>).
Zur Eliminierung der Belegung reicht es aus, das entsprechende
Zeichen in der Tastentabelle (alt) mit dem entsprechenden Zeichen
in der Tastentabelle neu (also '|') zu überschreiben.
Die Debug-Befehle hierfür lauten:
e 1141 <RETURN>
7C <RETURN> ; 7Ch = ASCII-Code von '|'
<RETURN>
Danach kann die geänderte Version von MDEBUG wieder zurückge-
schrieben und Debug verlassen werden.
w <RETURN>
q <RETURN>
Bei den angeführten Verfahren sind folgende Punkte zu berücksich-
tigen:
1. Die Änderungen sollten natürlich nur an einer Kopie von MDEBUG
durchgeführt werden!
2. Die neue Tastenbelegung sollte auch in der Datei MDHELP.INP
geändert werden und diese dann neu übersetzt werden.
3. Über diese beiden Tabellen können nur 'normale Tasten' (->> Low-
Byte des Scancodes ist ungleich 0) und nur im Interpreter umbe-
legt werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 143
4. Die Einträge am Ende der Tabelle (X <-> X) sind für neue Umbe-
legungen durch den Benutzer reserviert. Für eine neue Belegung
muß in der Tastentabelle (alt) am gewünschten Offset die umzu-
belegende Taste und am gleichen Offset in der Tastentabelle
(neu) die neue Belegung eingetragen werden.
Beachten Sie bitte, daß auch hier Sie selbst dafür sorgen
müssen, daß in der Tastentabelle (alt) keine Zeichen mehrfach
vorkommen. In der Tastentabelle (neu) hingegen kann jedes
Zeichen beliebig oft vorkommen. Da die Tabelle nur einmal pro
Taste von MDEBUG konsultiert wird, ist eine Rekursion bei
Tastenbelegungen wie
'A' -> 'B'
'B' -> 'A'
ausgeschlossen.
5. Die Konvertierung über die Tastentabellen erfolgt VOR der Kon-
vertierung eines Zeichens in Großbuchstaben. Ein umkodiertes
Zeichen wird NICHT mehr in Großbuchstaben konvertiert.
Falls also, z.B., das Zeichen 'a' öfters gebraucht wird, reicht
der Eintrag von 'a' als alte und neue Tastenbelegung in den
Tabellen aus um die Konvertierung von 'a' in 'A' zu unterbinden.
D.h. die Eingabe von 'a' ist dann ohne die vorherige Eingabe
des Prefix-Zeichens <CTRL-P> möglich.
Weiteres Beispiel:
Änderungen in der Tabelle mit den Scancodes sollten normalerweise
nicht vorgenommen werden.
Temporäre Umbelegungen der Tasten lassen sich sinnvollerweise über
einen Kommandotreiber realisieren.
Falls diese Änderungen über einen Hex-Editor direkt in der Datei
MDEBUG.COM durchgeführt werden, müssen von allen Offsets die MDEBUG
ausgibt jeweils 100h abgezogen werden!
Die angegebenen Verfahren zum Anpassen von MDEBUG sind zwar etwas
umständlich, aber da sie im Normalfall nur einmal durchgeführt
werden ist dies m.E. noch erträglich.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 144
Anhang D
Utilities und Beispieldateien zu MDEBUG
───────────────────────────────────────
Hinweis:
Die mit dem Zeichen (VV) gekennzeichneten Dateien
bzw. Programme sind nur in der Vollversion enthalten.
Die Beschreibung der mitgelieferten Kommando- und
Bildschirmtreiber befindet sich in der Datei
'DRIVER.PRT'
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 145
MDEBUG.HLP
Hilfstextdatei für MDEBUG
'MDEBUG.HLP' enthält den Hilfstext für die Online-Hilfe von MDEBUG
in komprimierter Form.
Die Datei wird beim Start von MDEBUG mit dem Parameter 'HELP' ohne
Angabe einer Hilfstextdatei einmal eingelesen und danach nicht mehr
benötigt.
Falls der Parameter 'HELP' ohne den Zusatz '=name' angegeben wird,
muß sich die Datei MDEBUG.HLP im aktuellen Verzeichnis oder in dem
Verzeichnis, in dem die Datei MDEBUG.COM residiert befinden.
MDHELP.INP (VV)
Quelldatei zur Erstellung von MDEBUG.HLP
MDMKHLP.COM (VV)
MDMKHLP.COM ist ein Programm zur Erstellung einer Hilfstextdatei
für die Online-Hilfe von MDEBUG.
Aufruf:
MDMKHLP eingabedatei ausgabedatei {/N} {/I} {/S} {/B} {/Q} {@}
Die Parameter haben folgende Bedeutungen:
/N - Ausgabedatei nicht komprimieren
Falls der Parameter /N nicht angegeben ist, wird die Ausgabedatei
komprimiert, ansonsten werden die Zeilen der Eingabedatei nach
einer Syntaxüberprüfung unkomprimiert übernommen. MDEBUG kann beide
Formate anzeigen, aber das unkomprimierte Format belegt natürlich
mehr Speicher.
/I - Sonderzeichen bei der Anzeige nicht interpretieren
Falls der Parameter '/I' angegeben ist, werden alle Sonderzeichen
in der Ausgabedatei mit dem Prefix-Zeichen versehen, so daß eine
Interpretierung bei der Anzeige in MDEBUG unterbleibt. Kommentare
in der Eingabedatei werden dann ebenfalls in die Ausgabedatei über-
nommen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 146
/B - Befehle für MDMKHLP nicht interpretieren
/S - Zeilen mit mehr als 80 Zeichen umbrechen.
Wenn der Parameter '/S' angegeben ist, können die Zeilen der Aus-
gabedatei maximal 254 Zeichen lang werden. Ohne den Parameter /S
dürfen die Zeilen der Ausgabedatei nur bis zu 80 Zeichen lang sein.
/Q - Meldungen und Warnungen unterdrücken
@ - Kommentar, der Rest der Parameter wird überlesen
Die Ein- und Ausgabedateien müssen in der angegebenen Reihenfolge
angegeben werden; alle anderen Parameter sind optional und können
hinter den Dateinamen in beliebiger Reihenfolge angegeben werden
(ausgenommen das Zeichen für den Kommentar '@').
Falls die Datei ausgabedatei schon existiert, wird sie ohne Warnung
überschrieben. Eine leere Ausgabeatei, d.h. ohne den eigentlichen
Hilfstext, kann nicht erstellt werden.
eingabedatei muß eine Textdatei mit jeweils durch das Zeichen CR
oder die Zeichen-Kombination CR/LF abgeschlossenen Zeilen sein.
Alle anderen ASCII-Steuerzeichen (z.B. Tabulatoren) werden nicht
interpretiert.
Jede Zeile der Eingabedatei kann max. 254 Zeichen lang sein.
Die maximale Länge einer Zeile für die Ausgabedatei (also die Länge
der Zeile der Eingabedatei abzüglich der Control- und Prefix-
Zeichen bis zu einem Kommentar-Zeichen, bzw. bis zum Ende der
Zeile, falls kein Kommentar-Zeichen vorhanden ist), ist 80.
Längere Zeilen führen zu einem Syntaxfehler und zum Abbruch des
Programms (falls nicht der Parameter '/S angegeben ist).
Die max. Größe der Eingabedatei ist nicht beschränkt, die Ausgabe-
datei kann max. 64 K groß werden. Allerdings muß die Beschränkung
der Puffergröße von MDEBUG beachtet werden, falls die gesamte
Datei in MDEBUG eingelesen werden soll.
Das Zeichen '@' gilt als Kommentar-Zeichen; d.h. jede Zeile der
Eingabedatei wird nur bis zum ersten '@' übernommen. Soll das Zei-
chen '@' in die Ausgabedatei übernommen werden, so muß es mit
einem vorangestellten Prefix-Zeichen versehen werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 147
Folgende Zeichen gelten als Sonderzeichen und werden bei der Aus-
gabe der Datei in MDEBUG interrpetiert:
# - Prefix-Zeichen, das folgende Zeichen wird uninterpretiert über-
nommen
^ - Control-Zeichen, falls das folgende Zeichen im Intervall von
'A' bis 'Z' (bzw. 'a'...'z') ist, wird es in den entsprechenden
CTRL-Code umgewandelt. Ansonsten wird das Zeichen '^' so über-
nommen. (Beispiel: '^A' = 01h, '^B' = 02h, usw.)
$ - Umschalten auf die Farbe 2 bzw. zurück auf die Farbe 1 und
Ausgabe eines Leerzeichens
! - Umschalten auf die Farbe 3 bzw. zurück auf die Farbe 1 und
Ausgabe eines Leerzeichens
Ein Nullbyte darf in der Eingabedatei nicht vorkommen! Jede Zeile
der Eingabedatei muß mit CR/LF oder CR enden (auch die letzte!).
Die Control- und Prefix-Zeichen sollten bei der Formatierung der
Zeilen berücksichtigt werden, sie dürfen nicht ohne Prefix-Zeichen
am Ende einer Zeile stehen. Falls ein Sonderzeichen in die Ausgabe-
datei als Zeichen übernommen werden soll, muß es mit dem Prefix-
Zeichen versehen werden. (z.B. '##' für '#')
Zu Anfang jeder Zeile wird auf die Ausgabe-Farbe 1 geschaltet.
Leerzeilen werden in den Hilfstext übernommen; Zeilen die nur aus
einem Kommentar bestehen (->> 1. Zeichen der Zeile ist '@') werden
vollständig überlesen.
Die erste zu übernehmende Zeile der Eingabedatei wird als Über-
schrift genommen und beim Scrollen des Hilfstextes in MDEBUG immer
angezeigt. Ein Rahmen um den Hilfstext muß Bestandteil der Ein-
gabedatei sein, falls er angezeigt werden soll.
Alle Zeilen der Eingabedatei, die mit einem Punkt in der ersten
Spalte beginnen, werden als Befehl für MDMKHLP angesehen. Hinter
einem korrekten Befehl kann noch ein beliebiger Text als Kommentar
stehen. Die Befehle setzen evtl. anders angegebene Parameter außer
Kraft.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 148
Folgende Befehle sind implementiert:
.Mn mit 1 <= n <= 9
Mit diesem Befehl kann ein Marker mit der Adresse der folgenden
Zeile als Voreinstellung belegt werden. Für jeden Marker kann nur
ein .M-Befehl in einer Datei angegeben werden. .M-Befehle für schon
gesetzte Marker werden als falsche Befehle behandelt. Nicht ge-
setzte Marker werden von MDMKHLP auf die zweite Zeile der Ausgabe-
datei gesetzt. MDMKHLP gibt jeweils für jeden gesetzten Marker
die Zeilennummer aus.
.I0
Interpretierung der besonderen Zeichen bei der Ausgabe für die fol-
genden Zeilen verhindern
.I1
Interpretierung der besonderen Zeichen für die folgenden Zeilen
wieder einschalten
.N0
Komprimierung der folgenden Zeilen verhindern
.N1
Komprimierung der folgenden Zeilen wieder einschalten
.Kz
Nehme das Zeichen z als Kommentar-Zeichen für die Eingabedatei.
Voreinstellung für z ist das Zeichen '@'.
.Q1
Meldungen und Warnungen unterdrücken
.Q0
Meldungen und Warnungen ausgeben
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 149
.B
Beende die Interpretierung von Befehlen, d.h. ab diesen Befehl
werden auch alle mit einem Punkt beginnenden Zeilen in die Ausgabe-
datei übernommen. (von diesem Befehl gibt es kein zurück!)
Die folgenden Befehle können jeweils nur EINMAL VOR dem eigent-
lichen Text der Hilfstext-Datei angegeben werden. (Fehlerhafte
Befehle zählen nicht) Der Hilfstext beginnt mit der ersten Zeile
die keinen Befehl enthält und nicht nur aus einem Kommentar
besteht. (Leerzeilen werden in den Hilfstext übernommen!)
.Pz
Nehme das Zeichen z als Prefix-Zeichen für die Anzeige
Voreinstellung für z ist das Zeichen '#'
.Cz
Nehme das Zeichen z als Control-Zeichen für die Anzeige
Voreinstellung für z ist das Zeichen '^'
.F1z
Nehme das Zeichen z als 1. Farbmarker für die Anzeige
Voreinstellung für z ist das Zeichen '$'
.F2z
Nehme das Zeichen z als 2. Farbmarker für die Anzeige
Voreinstellung für z ist das Zeichen '!'
Für den Parameter z der Befehle gilt:
Außer den Zeichen mit dem ASCII-Codes 00h, 07h, 08h, 09h, 0Ah und
0Dh kann jedes Zeichen als besonderes Zeichen benutzt werden. Es
ist nicht möglich einem Zeichen mehrere Bedeutungen zuzuordnen.
Für jeden fehlerhaften Befehl gibt MDMKHLP eine Warnung auf die
Standard-Ausgabe aus. Zeilen mit falschen Befehlen werden nicht
übernommen und führen nicht zum Programm-Abbruch.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 150
Soll eine Zeile, die mit einem Punkt beginnt, bei aktiver Interpre-
tierung der Befehle durch MDMKHLP in die Ausgabedatei übernommen
werden, so muß diese mit einem vorangestellten Prefix-Zeichen
versehen werden.
MDMKHLP gibt jeweils eine Meldung über die Bearbeitungsschritte auf
die Standard-Ausgabe auf. Falls ein Fehler bei der Dateibearbeitung
oder ein Syntax-Fehler auftritt, wird das Programm abgebrochen und
eine Fehlermeldung auf die Standard-Ausgabe ausgegeben.
Bei Syntaxfehlern werden die Zeile und die Spalte des falschen
Zeichens mit ausgegeben. Die Angaben beziehen sich dabei auf die
Eingabedatei (Kommentarzeilen zählen dabei mit).
Nach einer erfolgreichen Bearbeitung gibt MDMKHLP die Größe der
Ausgabedatei in Byte und die verwendeten Sonderzeichen auf die
Standard-Ausgabe aus.
Hinweis:
Falls bei Angabe des Schalters /S ohne den Schalter /N das 80.
Zeichen in einer Folge mit mehr als 3 Zeichen liegt, so werden nur
die vor dem 80. Zeichen liegenden Zeichen dieser Folge angezeigt.
Das gleiche gilt für die Spalten 160 und 240.
Abhilfe: Komprimierung für diese Zeile(n) ausschalten.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 151
MDSHELP.COM (VV)
MDSHELP.COM ist ein Programm zum Überprüfen der Formatierung einer
mit MDMKHLP erstellten Hilfstextdatei für MDEBUG.
Aufruf: MDSHELP {hilfstextdatei} {@} {kommentar}
Parameter:
hilfstextdatei - Name der zu testenden Datei
Der Name der Hilfstextdatei kann nicht mit dem
Zeichen '@' beginnen.
@ - Rest der Parameter überlesen
Die Voreinstellung für die Hilfstextdatei ist 'MDEBUG.HLP' im akt.
Directory.
MDSHELP zeigt den Hilfstext in der oberen Bildschirmhälfte genauso
wie er in der Online-Hilfe von MDEBUG angezeigt würde an.
Zusätzlich gibt MDSHELP zur Information auch noch die verwendeten
Sonderzeichen in der Datei auf die Standard-Ausgabe aus. Bei der
Anzeige sind alle Tasten wie in der Onlinehilfe von MDEBUG belegt.
Allerdings kann das Fenster von MDSHELP nicht verschoben werden
und MDSHELP unterstützt keine externen Bildschirmtreiber. (MDSHELP
ermittelt die Daten des aktuellen Bildschirm-Modus über den Inter-
rupt 10h und die BIOS-Data-Area.)
MDSHELP kann bis zu 55 K große Dateien bearbeiten.
SETMD.EXE
Mit SETMD kann das Passwort von MDEBUG geändert, gelöscht oder neu
eingerichtet werden.
Aufruf: SETMD
SETMD erfragt alle benötigten Daten im Dialog mit dem Benutzer.
Falls eine mit einem Passwort versehene Version von MDEBUG geändert
werden soll, so muß das alte Passwort bekannt sein. Ein Fehler bei
der Eingabe führt zum Programm-Abbruch.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 152
SETREGNR.EXE (VV)
Mit dem Programm SETREGNR kann ein Benutzer der Vollversion seine
Registrierungs-Nummer in das Programm MDEBUG.COM eintragen. Die
Eintragung deaktiviert die Shareware-Meldung und gibt den Parameter
'MAKE' frei.
Aufruf: SETREGNR
SETREGNR erfragt alle benötigten Daten im Dialog mit dem Benutzer.
CALLMDB.COM (VV)
CALLMDB.COM ist ein Programm zum Aufruf von MDEBUG aus einer Batch-
datei heraus.
Aufruf: CALLMDB {/opt} {"text"} {#nnnn} {...} {#} {@ kommentar}
Parameter:
opt - Optionen für CALLMDB:
N - Diese Option unterdrückt das Anhängen von <F10>
hinter den Parametern durch CALLMDB
Pxxxx - 'xxxx' ist das Passwort für MDEBUG
text - Text der zeichenweise übergeben wird
Falls das Zeichen " übergeben werden soll, muß es durch "" angege-
ben werden. Control-Codes können durch das Zeichen ^ gefolgt von
einem Großbuchstaben eingegeben werden. Das Zeichen ^ vor einem
Großbuchstaben muß als ^^ angegeben werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 153
#nnnn - Scancode einer Taste (hexadezimal)
speziell:
#0 - Simuliere leeren Tastaturpuffer.
Der Code ist notwendig, falls nach einen mit einen
Fehler endenden Befehl noch weitere Befehle ausge-
führt werden sollen. (MDEBUG löscht den Tastatur-
puffer nach einem Fehler)
Die Scancodes der Funktionstasten können der Tabelle in der
Dokumentation von MDEBUG entnommen werden oder über MDEBUG ermit-
telt werden. Der angegebene Wert darf nicht größer als 0FFFFh
sein; führende Nullen sind möglich. Der ermittelte Wert wird bis
auf Wortgröße von links mit Nullen aufgefüllt (z.B. wird aus '#0D'
der Scancode 000Dh). Da MDEBUG den Status der Umschalt-Tasten nicht
berücksichtigt, können auch die Tastaturcodes für Tasten wie z.B.
<SHIFT-F6> o.ä. übergeben werden.
# - Ausgabe der von CALLMDB verwendeten Tastencodes und Beenden des
Aufrufs. Falls die Codes der Tasten <F10>, <F4> oder <ESC> in
MDEBUG geändert werden, müssen die neuen Codes auch in CALLMDB
eingetragen werden!
(siehe Beschreibung der Parameter von MDEBUG)
@ - Rest der Parameter überlesen
Übergeben werden nur die Zeichen zwischen zwei Gänsefüßchen und
die explizit angegebenen Scancodes. Zwischen diesen dürfen zur
Trennung Leerzeichen und Tabulatoren gesetzt werden. Maximal können
256 Tastencodes übergeben werden. Dieses Maximum kann aber aufgrund
der Beschränkung von DOS nie erreicht werden.
Ein falscher Parameter führt zum Abbruch von CALLMDB.
Der User-Int von MDEBUG muß installiert sein falls CALLMDB benutzt
werden soll. CALLMDB installiert, nachdem es festgestellt hat, das
MDEBUG mit einem User-Int geladen ist, eine eigene Routine für die
Ermittlung der Tastatureingaben in MDEBUG und ruft den User-Int von
MDEBUG auf. Die Parameter werden dann sequentiell an MDEBUG über-
geben.
Nach dem Aufruf über CALLMDB startet MDEBUG immer im Interpreter.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 154
Befehle für MDEBUG können wie im Interpreter angegeben werden,
müssen aber jeweils mit dem ScanCode der Taste <RETURN> beendet
werden:
Beispiel: CALLMDB "M FS,CS ^M FO,0 ^M "
─┐ ┌─
└──┬───┘
<RETURN>
oder
CALLMDB "M FS,CS " #0D " M FO,0" #0D
──┐ ┌──
└───┬───────┘
<RETURN>
Die Tastenumbelegungen des Interpreters sind auch für über CALLMDB
übergebene Befehl gültig:
Beispiel: CALLMDB "M AX,4ä1" #0D
──────────
Interpreter-Befehl: M AX,4«1
Kleinbuchstaben werden von MDEBUG in Großbuchstaben konvertiert.
Soll ein Kleinbuchstabe eingegeben werden, so muß diesem der Code
für <CTRL-P> vorangestellt werden.
Beispiel: CALLMDB "M R8,'^Pa' ^M "
──
<CTRL-P>
oder
CALLMDB "M R8,'" #1910 "a'" #0D
─────
<CTRL-P>
Steuerzeichen müssen ebenfalls mit dem Prefix-Zeichen versehen ein-
gegeben werden.
Hinter den angegegebenen Parametern setzt CALLMDB noch den Scancode
für <F10> damit MDEBUG nach der Bearbeitung sofort wieder verlassen
wird. Soll dies verhindert werden, so muß CALLMDB mit dem Parameter
'/N' aufgerufen werden oder als letzter Befehl für MDEBUG der W-
Befehl übergeben werden:
Beispiel: CALLMDB "M R8,'A' ^ W " #0D
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 155
Hinweis:
Falls das Passwort von MDEBUG aktiv ist und der Parameter '/P' für
CALLMDB nicht angegeben wird, wird MDEBUG nach der Bearbeitung der
Parameter NICHT sofort verlassen.
Natürlich kann in den Parametern auch vorher schon ein Befehl zum
Verlassen von MDEBUG enthalten sein. Die Parameterteile, die dann
von MDEBUG nicht mehr bearbeitet werden, werden verworfen (keine
Weitergabe an andere Programme).
Beispiel: CALLMDB {irgendwas} #1B #1B {irgendwas}
────────── ─────── ───────────
wird ausge- 2 x <ESC>, wird ignoriert
führt MDEBUG
verlassen
Falls das Passwort von MDEBUG aktiv ist, sollte der Parameter
'/Pxxxx' benutzt werden, da das Passwort ansonsten zweimal vor den
eigentlichen Parametern und zusätzlich einmal manuell eingegeben werden
muß.
Falls nach jedem Start von MDEBUG über CALLMDB Voreinstellungen
vorgenommen werden sollen, wird sinnvollerweise das Passwort durch
SETMD zwar eingerichtet, aber so, daß es beim Start zuerst ausge-
schaltet ist. Als erster Parameter für CALLMDB wird dann der Scan-
code von <F3>, #3D00h, angegeben womit das Passwort eingeschaltet
wird.
Beispiel: CALLMDB #3D00 {weitere Befehle/Tasten}
Über CALLMDB kann auch während der Abarbeitung einer Batch-Datei
die Tastatur für einen Teil der Befehle gesperrt werden:
REM Befehle, die unterbrechenbar ausgeführt werden sollen
REM ...
REM Tastatur blockieren (falls das Passwort von MDEBUG schon
REM eingeschaltet ist, kann der Tastencode #3D00 entfallen,
REM xxxx = Passwort von MDEBUG)
CALLMDB #3D00 "QL ^M" /Pxxxx
REM Befehle, die mit Tastaturblockierung ausgeführt werden
REM sollen
REM ...
REM und Tastaturblockierung wieder aufheben
CALLMDB /Pxxxx
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 156
DISSTAT.COM (VV)
DisStat.COM ist ein Util zum Konvertieren einer Status-Datei des
Disassemblers MDDISDRV in ein lesbares Format.
DisStat.COM kann folgendermaßen aufgerufen werden:
DISSTAT statusdatei {>ausgabeeinheit}
Da DisStat die Ausgaben auf die Standard-Ausgabe schreibt, sollte
diese immer in eine Datei oder auf ein Gerät umgeleitet werden.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 157
TESTMD.PAS
Demo-Programm in Turbo-Pascal 4.0/5.0 zur Demonstration der Nutzung
von MDEBUG in eigenen Programmen.
Zur Compilierung werden die Dateien
CHECKMD.OBJ, CALLMD.OBJ, MDCMD.OBJ und KONVERT.OBJ
benötigt.
TESTMD.EXE
Übersetzte Version von TESTMD.PAS
Aufruf: TESTMD
CHECKMD.A86
Assember-Routine zum Überprüfen, ob MDEBUG installiert ist und,
falls ja, Ermitteln des User-Ints von MDEBUG. Der Quelltext ist für
die Übersetzung mit dem Assembler A86 geschrieben.
Die Routine wurde speziell zur Nutzung in Turbo-Pascal-Programmen
geschrieben und sollte für andere Programmiersprachen als Beispiel
genommen werden.
CHECKMD.OBJ
Übersetzte Version von CHECKMD.A86
CALLMD.A86
Assembler-Routine zum Aufruf des User-Ints von MDEBUG aus einem
Turbo-Pascal-Programm heraus. Der Quelltext ist für die Übersetzung
mit dem Assembler A86 geschrieben.
Die Routine wurde speziell zur Nutzung in Turbo-Pascal-Programmen
geschrieben und sollte für andere Programmiersprachen als Beispiel
genommen werden.
CALLMD.OBJ
Übersetzte Version von CALLMD.A86
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 158
MDCMD.A86
Assembler-Routine zur Ausführung von Befehlszeilen über MDEBUG in
eigenen Programmen. Der Quelltext ist für die Übersetzung mit dem
Assembler A86 geschrieben.
Die Routine wurde speziell zur Nutzung in Turbo-Pascal-Programmen
geschrieben und sollte für andere Programmiersprachen als Beispiel
genommen werden.
MDCMD.OBJ
Übersetzte Version von MDCMD.A86
KONVERT.A86
Konvertierungs-Routinen für TESTMD.PAS
Der Quelltext ist für die Übersetzung mit dem Assembler A86
geschrieben.
KONVERT.OBJ
Übersetzte Version von KONVERT.A86
UPSTR.BIN
LOWSTR.BIN
Beispieldateien für die Möglichkeit über den Parameter '&name' auch
übersetzte Routinen ins PSP von MDEBUG einzulesen. In den beiden
Dateien steht jeweils am Ende der Datei die Länge des Codes als
Wort (eingerahmt mit der Zeichenfolge '**') und dahinter der Name
der Routine (abgeschl. durch '*').
UPSTR.BIN und LOWSTR.BIN belegen jeweils 32 Byte.
Benutzung (z.B.): MDEBUG &upstr.bin,,,N
MDEBUG SET &lowstr.bin,0,32,N
UPSTR.A86
LOWSTR.A86
Quelldateien für UPSTR.BIN und LOWSTR.BIN. Die Übersetzung erfolgte
mit dem A86. Dieser Assembler ist für solche Aufgaben auf jedem
Fall dem MASM vorzuziehen.
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 159
SHOW2FP.COM
SHOW2FP ist ein Programm zum Testen der Prozessnummern des Inter-
rupts 2Fh.
Aufruf: SHOW2FP {prozessnummer} {@ kommentar}
Parameter:
prozessnummer
'prozessnummer' ist die zu testende Prozessnummer des Interrupts
2Fh (hex., Interavll: 0C0h..0FEh).
@ - Rest der Parameter überlesen
Ist eine Prozessnummer angegeben, gibt SHOW2FP aus, ob diese und
die folgende Prozessnummer schon belegt ist oder nicht.
Wird kein Parameter angegeben, so gibt SHOW2FP alle belegten Pro-
zessnummern zwischen C0h und FFh aus.
FREESTCK.COM
Programm zur Freigabe aller belegten und übergelaufenen Stack-
Frames der STACK-Verwaltung.
(erst ab DOS 3.3 vorhanden, siehe 'Stack-Überlauf')
Aufruf: FREESTCK
MDCGADRV.ASM (VV)
Quelltext des Treibers MDCGADRV.COM
(ausführlich kommentierter Assemblertext für den A86)
MDHGCDRV.ASM (VV)
Quelltext des Treibers MDHGCDRV.COM
(ausführlich kommentierter Assemblertext für den A86)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 160
MDDRIVER.ASM (VV)
Gerüst zur Programmierung von eigenen Bildschirmtreibern.
(ausführlich kommentierter Assemblertext für den A86)
MDDRIVER.ASM enthält schon die gesamte Logik des Treibers; was
fehlt sind nur die Routinen zum Erkennen, Sichern und Restaurieren
der Bildschirmdaten.
MDBSPDRV.ASM (VV)
Quelltext des Kommandotreibers MDBSPDRV.COM (residenter Teil)
(ausführlich kommentierter Assemblertext für den A86)
MDBSPDRV.INC (VV)
Quelltext des Kommandotreibers MDBSPDRV.COM (transienter Teil)
(ausführlich kommentierter Assemblertext für den A86)
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 161
────────────────────────────────────────────────────────────────────────────────
MDEBUG - Benutzer- und Referenz-Handbuch Seite 162